2011-03-31 119 views
2

我想知道是否有可能对整个单词使用负匹配,使像[^(<em>.*?<\/em>)]会之间匹配一切,但文本(含)<em>...</em>Ruby的正则表达式:负匹配,

我在考虑使用负向预测,但我认为这不会起作用,因为我需要检查开放<em>以及。

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

THX任何帮助

+0

相关问题:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2011-03-31 22:17:08

回答

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' 
0

整个事情与环视是,它不消耗任何输入。如果你想匹配除了模式以外的所有内容,这意味着你想匹配该模式的前缀和后缀。要匹配后缀,你可能想要消耗---并扔掉 - 你不想要的模式。但负向预测不会消耗。