我想用RegEx 排除一个或另一个角色.我有一个搜索模式的RegEx \[([^\[]+\]\=\>(.*)
.
我的问题是最后的捕获模式.后面的字符串>
应该后跟逗号或右括号.
这是我的文字:Array([0]=>123,[1]=>Array([a]=>1,[b]=>2))
我想得到:
// match 1 0 = 0 1 = 123 // match 2 0 = 1 1 = Array([a]=>1,[b]=>2)
这是我的RegEx:\[([^\[]+)\]\=\>([^,\)]+)\)?
但我得到:
// match 1 0 = 0 1 = 123 // match 2 0 = 1 1 = Array([a]=>1 // match 3 0 = b 1 = 2
Krzysztof Ko.. 5
字符类[^,\)]
显式排除逗号,因此它永远不会匹配Array([a]=>1,[b]=>2)
.
如果只使用一个嵌套级别就可以了,可以尝试以下方法:
\[([^\]]+)\]=>(Array\([^\)]+\)|[^,\)]+)?
如果要使用任意嵌套定义Array
,则无法使用正则表达式解决此问题,因为要解析的语言不是常规语言.您应该使用解析器生成器或编写递归下降解析器,它实现以下语法:
Start : Array Array : "Array" "(" ElementList ")" ElementList : "" | Elements Elements : Element | Element "," Elements Element : "[" String "]" "=>" Value Value : Number | Array Number : [1-9][0-9]* String : [^\]]+
尝试为JavaScript寻找解析器生成器.PEG.js是一个例子:http://pegjs.majda.cz/
字符类[^,\)]
显式排除逗号,因此它永远不会匹配Array([a]=>1,[b]=>2)
.
如果只使用一个嵌套级别就可以了,可以尝试以下方法:
\[([^\]]+)\]=>(Array\([^\)]+\)|[^,\)]+)?
如果要使用任意嵌套定义Array
,则无法使用正则表达式解决此问题,因为要解析的语言不是常规语言.您应该使用解析器生成器或编写递归下降解析器,它实现以下语法:
Start : Array Array : "Array" "(" ElementList ")" ElementList : "" | Elements Elements : Element | Element "," Elements Element : "[" String "]" "=>" Value Value : Number | Array Number : [1-9][0-9]* String : [^\]]+
尝试为JavaScript寻找解析器生成器.PEG.js是一个例子:http://pegjs.majda.cz/