我正在寻找一个正则表达式来替换括号中的所有术语,除非括号在方括号内。
e.g。
(matches) #match
[(do not match)] #should not match
[[does (not match)]] #should not match
我目前有:
[^\]]\([^()]*\) #Not a square bracket, an opening bracket, any non-bracket character and a closing bracket.
然而,这仍然是方括号内的匹配词。
到目前为止,我还创建了一个我的进度的rubular页面:http://rubular.com/r/gG22pFk2Ld
答案 0 :(得分:2)
这是使用纯正则表达式方法的cannot parse表达式,因为您需要跟踪当前嵌套/ state_if_in_square_bracket(因此您没有类型3语言了)。
但是,根据具体情况,您可以使用多个正则表达式或简单解析器对其进行解析。示例方法:
[
/ [[
或]
/ ]]
,更改状态
当这样的方括号时
遇到了,在一个替换()
子字符串if in
“not_in_square_bracket”州解决方案的复杂性还取决于允许转义的详细信息。
答案 1 :(得分:2)
如果可以嵌套方括号(see this related question),正则表达式不会为你剪切。
我认为你只能使用正则表达式,如果(a)你只允许一个方括号和(b)你假设所有方括号都正确匹配。在那种情况下
\([^()]*\)(?![^\[]*])
就足够了 - 它匹配任何带括号的表达式而不是,后跟未配对的]
。你需要(b)因为负面观察的限制(只有固定长度的字符串在1.9中,而在1.8中根本不允许),这意味着即使你不想这样,你也会被卡住(match)]
。 / p>
所以基本上如果你需要嵌套,或者允许不匹配的括号,你应该抛弃正则表达式并查看answer到我上面链接的问题。