RegEx排除一个或另一个字符

时间:2014-01-07 14:06:07

标签: regex nsregularexpression

我想用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

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