正则表达式:抓住单词的第一个实例,除非中间有 "forbidden" 个单词

Regex: Grab first instance of word unless "forbidden" word in between

我需要匹配两个单词("ham" 或 "turkey")的第一个实例,仅当其中一个单词跟在单词 "sandwich" 之后并且单词 "forbidden" 不是' 出现在 "sandwich" 和 ("ham" 或 "turkey") 之间。

reuben sandwich with ham and turkey ham sandwich with cheese
reuben sandwich with forbidden ham and turkey ham sandwich with cheese

我使用的正则表达式 sandwich(.*?)(?!.*forbidden)(ham)((.*?)(turkey))? 仍然匹配第二句。如何修改正则表达式以不匹配第二句。提前致谢!

您可以使用

sandwich((?:(?!forbidden).)*?)(ham|turkey)

regex demo

  • sandwich - 匹配子串 sandwich
  • ((?:(?!forbidden).)*?) - 第 1 组匹配任何不以 forbidden 字开头的字符,零次或多次,尽可能少
  • (ham|turkey) - hamturkey.

以下是您可能会考虑的一些变体: