识别以下内容:
[stack][overflow]
or
[is great!]
我做:
/\[([^\]]+)\](\[([^\]]+)\])?/.match(s)
现在我想对此进行扩展,以便[...][...]
或[...]
位于\
之后,将无法识别:
\[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中都有用。
答案 0 :(得分: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
...
答案 1 :(得分:3)
我想出了这个正则表达式:
/([^\\\[\]]|^)\[([^\]]+)\](\[([^\]]+)\])?/
你可以在这里试试:
http://rubular.com/r/L796M2pcG7
希望有所帮助。
编辑:对你的评论作出反应 编辑:下一个