Ruby正则表达式:负匹配

时间:2011-03-31 18:03:37

标签: ruby regex

我想知道是否可以在整个单词上使用否定匹配,因此像[^(<em>.*?<\/em>)]这样的内容会匹配之外的所有文本(包括)<em>...</em>

我正在考虑使用否定前瞻,但我认为这不会起作用,因为我还需要检查开场<em>

当然,我可以使用正面正则表达式然后从原始文本中减去匹配项,但我正在寻找更“优雅”的解决方案。

thx任何帮助

2 个答案:

答案 0 :(得分:4)

String#split作为否定匹配。它返回一个与正则表达式不匹配的任何部分的数组。

'XXXXXXXX<em>YYYYYYY</em>ZZZZZZZZ'.split(%r|<em>.*?</em>|)
# => ['XXXXXXX', 'ZZZZZZZZ']

如果要将其恢复为字符串,只需执行join

'XXXXXXXX<em>YYYYYYY</em>ZZZZZZZZ'.split(%r|<em>.*?</em>|).join
 # => 'XXXXXXXZZZZZZZZ'

答案 1 :(得分:0)

环视的全部内容是它不会消耗任何输入。如果要匹配除模式之外的所有内容,则表示您希望匹配该模式的前缀和后缀。要匹配后缀,您可能想要消耗---并扔掉 - 您不想要的模式。但负面的前瞻不消耗。