正则表达式:抓住单词的第一个实例,除非中间有 "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)
sandwich
- 匹配子串 sandwich
((?:(?!forbidden).)*?)
- 第 1 组匹配任何不以 forbidden
字开头的字符,零次或多次,尽可能少
(ham|turkey)
- ham
或 turkey
.
以下是您可能会考虑的一些变体:
- 如果需要在
sandwich
之后匹配ham
and/orturkey
,使用sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(ham|turkey)
- 如果你只需要匹配
ham
然后 turkey
或 turkey
然后 ham
,你可以在上面的正则表达式中添加一个否定的前瞻:sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(?!)(ham|turkey)
.
我需要匹配两个单词("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)
sandwich
- 匹配子串sandwich
((?:(?!forbidden).)*?)
- 第 1 组匹配任何不以forbidden
字开头的字符,零次或多次,尽可能少(ham|turkey)
-ham
或turkey
.
以下是您可能会考虑的一些变体:
- 如果需要在
sandwich
之后匹配ham
and/orturkey
,使用sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(ham|turkey)
- 如果你只需要匹配
ham
然后turkey
或turkey
然后ham
,你可以在上面的正则表达式中添加一个否定的前瞻:sandwich((?:(?!forbidden).)*?)(ham|turkey)(.*?)(?!)(ham|turkey)
.