我想知道是否可以在整个单词上使用否定匹配,因此像[^(<em>.*?<\/em>)]
这样的内容会匹配除之外的所有文本(包括)<em>...</em>
。
我正在考虑使用否定前瞻,但我认为这不会起作用,因为我还需要检查开场<em>
。
当然,我可以使用正面正则表达式然后从原始文本中减去匹配项,但我正在寻找更“优雅”的解决方案。
thx任何帮助
答案 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)
环视的全部内容是它不会消耗任何输入。如果要匹配除模式之外的所有内容,则表示您希望匹配该模式的前缀和后缀。要匹配后缀,您可能想要消耗---并扔掉 - 您不想要的模式。但负面的前瞻不消耗。