在整个字符串中找不到特定的单词时,如何不打“ hit”?

时间:2019-09-23 11:52:48

标签: regex regex-lookarounds regex-negation

我有几个字符串:

1. "I offer a jacket from adidas"
2. "I offer clothing from adidas, a jacket"
3. "By my adidas jacket"
4. "adidas jacket"
5. "jacket adidas"
6. "I offer some shoes from adidas"
7. "Selling some nice adidas shoes"
8. "I have some shoes from adidas"

现在,当找到单词“ adidas”时,我想要一个命中点,但是当字符串“ jacket”中的某个位置被包含时,我不想被击中。

当“夹克”一词位于“ adidas”后面时,我设法不被击中,但是当“夹克”一词位于“ adidas”前面时,我受到了打击。

adidas(?!.*jacket.*)

显示1、5、6、7和8的匹配。 但是1和5不应显示为匹配。

1 个答案:

答案 0 :(得分:1)

您可以将否定前瞻放在开头,并使用锚点^和单词边界\b,以防止该单词成为较大单词的一部分。

^(?!.*\bjacket\b).*\badidas\b.*
  • ^字符串的开头
  • (?!.*\bjacket\b)断言右边的内容不包含jacket
  • .*\badidas\b.*匹配0+乘以任何字符,然后匹配adidas且0+乘以任何字符

Regex demo