我想用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
答案 0 :(得分: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/
答案 1 :(得分:0)
Regex OR语法是一个管道例如“a | b”将批处理a或b