用于括号内文本的Ruby正则表达式

Gaz*_*ler 5 ruby regex

我正在寻找一个正则表达式来替换括号中的所有项,除非括号在方括号内.

例如

(matches) #match
[(do not match)] #should not match
[[does (not match)]] #should not match
Run Code Online (Sandbox Code Playgroud)

我目前有:

[^\]]\([^()]*\) #Not a square bracket, an opening bracket, any non-bracket character and a closing bracket.
Run Code Online (Sandbox Code Playgroud)

但是,这仍然是方括号内的匹配单词.

到目前为止,我还创建了一个我的进度的rubular页面:http://rubular.com/r/gG22pFk2Ld

And*_*nes 3

如果您可以嵌套方括号(请参阅此相关问题) ,则正则表达式不会为您切割它。

我认为只有在(a)您只允许一层方括号并且(b)您假设所有方括号都正确匹配的情况下,您才能使用正则表达式执行此操作。在这种情况下

\([^()]*\)(?![^\[]*])
Run Code Online (Sandbox Code Playgroud)

就足够了 - 它匹配任何后面没有未]配对的括号表达式。你需要(b),因为负向后查找的限制(1.9 中只有固定长度的字符串,1.8 中根本不允许),这意味着(match)]即使你不想,你也会陷入匹配。

因此,基本上,如果您需要嵌套或允许不匹配的括号,您应该放弃正则表达式并查看我上面链接的问题的答案