正则表达式来检查多个

我想写一个正则表达式来匹配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