2

要识别以下内容:

[stack][overflow]
or
[is great!]

我愿意:

/\[([^\]]+)\](\[([^\]]+)\])?/.match(s)

现在我想扩展它,使得 if[...][...][...]之后\它不会被识别:

\[stack][overflow]   # => Should not match
\[is great!]         # => Should not match
a \[b][c] \[d] [e]   # => Should match [e]

我如何扩展正则表达式来实现这一点?

它应该适用于 Ruby 1.9.2 和 Ruby 1.8.7。

4

2 回答 2

3

你可以这样做:

/(^|[^\\\]])(\\\\)*(\[([^\]]+)\]){1,2}/

(补充(^|[^\\])(\\\\)*

这通过匹配主题字符串的开头(如果之前没有任何内容[)或除 之外的任何字符\,后跟任意数量的转义\\.

[1]       => yes
[1][2]    => yes
x[1]      => yes
x[1][2]   => yes
\[1]      => no
\[1][2]   => no
\\[1]     => yes
\\[1][2]  => yes
\\\[1]    => no
\\\\[1]   => yes
\\\\\[1]  => no
\\\\\\[1] => yes    
...

在这里试试:http ://rubular.com/r/ST9qOVjUXe

于 2011-09-13T11:48:12.417 回答
3

我想出了这个正则表达式:

/([^\\\[\]]|^)\[([^\]]+)\](\[([^\]]+)\])?/

你可以在这里试试:

http://rubular.com/r/L796M2pcG7

希望有帮助。

编辑:对您的评论做出反应编辑:下一个

于 2011-09-13T12:04:38.943 回答