正则表达式:匹配多个可能出现的单词的最后一次出现,其中一个单词紧随另一个单词的子集

时间:2019-07-10 15:05:41

标签: regex

我不确定我是否恰当地表述了这个问题和/或有点过于密集。我有以下正则表达式:

^.*(foobar|bar|abc|xyz)

...我想匹配以上任何一个单词的最后一次出现。最初的量词是贪婪的,所以我会碰到最后一次而不是第一次出现,但是foo一词是另一个foobar的尾随子集,所以如果我有这句话one abc two foobar three,然后小组比赛是bar,这不是我想要的。应该是foobar

https://regex101.com/r/fEzBal/1

1 个答案:

答案 0 :(得分:1)

解决方案是在小组之前和之后使用词边界\b来强制匹配整个词。

^.*\b(foobar|bar|abc|xyz)\b

从文档中:

  

\ b会在不消耗任何字符的情况下立即在\ w匹配的字符和不与\ w匹配的字符之间匹配(以任何顺序排列)。

Demo