正则表达式来检查多个
我想写一个正则表达式来匹配ruby的列表和哈希语法,例如:
[:a, "b", c, 3]
{:a => [
1,2,3
]}
[1, {
a => "t", :b => "w",
:c => :o
}, 3]
这个问题当然是事物的嵌套/递归性质。 我怀疑这种嵌套结构实际上不能表达为正则表达式,因为'语言'不是常规的。 我期望解决方案必须涉及子程序和递归,但是我正在努力想方设法解决它。 任何人都可以确认/否认我的怀疑或提供解决方案吗?
任何帮助赞赏。
编辑:作为说明,我主要使用PHP的preg_*
方法
编辑:作为另一个说明,我创建了一个例程<ruby_value>
来匹配键和标量值。
编辑:我应该说明我对这个“出于兴趣”更感兴趣。 我已经在PHP中为这些东西写了一个迷你分析器,但是我有兴趣看看是否存在一个不必要的纯正规表达式解决方案。
例如相等的嵌套括号:
/^(?<paren_expr>
( (?: (?&paren_expr) | ) )
)$/x
这是一个有效的PHP正则表达式,它将匹配“(())”,“()”和“(((((())))))”“但不是”(“或”(()“等。
你是正确的,嵌套结构不是一个正规的语言,因此不能通过纯正则表达式来表达。
PCRE有能力指定递归正则表达式,但我不确定PHP的实现是否包含这种支持。
实际上,你想要做的是自己写一个状态机(嵌套内存)。
正确,它不规则,所以你不能用1个非递归表达式来匹配它。
但是,您可以制作一个替换每场比赛的循环,直到没有可用的比赛。
所以...
[[[ foo ]]]
[[PLACEHOLDER_001]]
[PLACEHOLDER_002]
PLACEHOLDER_003
这样你可以使它工作没有问题。 不能说这是一个非常漂亮的解决方案。 基于堆栈的解决方案会更好。
链接地址: http://www.djcxy.com/p/92697.html上一篇: Regular Expression to check multi
下一篇: Regex Problem in PHP