Ruby 正则表达式匹配除非用\转义

标签 ruby regex lookbehind

识别以下内容:

[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 中运行。

最佳答案

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

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

您可以在这里尝试:

http://rubular.com/r/L796M2pcG7

希望有帮助。

编辑:对您的评论使用react 编辑:下一个

关于Ruby 正则表达式匹配除非用\转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401244/

相关文章:

ruby-on-rails - TestFirst Ruby 类(class)的第一课

php - 哪些框架代表了不同于 MVC 的范例?

python - 在 python 中打印列表中的所有项目时出现问题

java - 用正则表达式匹配规则替换每个单词的第一个元音

javascript - 从字符串中提取城市和邮政编码

javascript - 构建此 JavaScript 正则表达式的困难

php - 是否可以在正则表达式中对两个单独的环视/零宽度断言(即lookbehind/look-behind)进行“与”操作?

Ruby:从数组的开头就地删除元素并返回剩余的数组

ruby - 列出两个数组每个位置的元素的最大值或最小值

c# - 使用负向后查找,同时仍然返回匹配的子表达式