URL匹配正则表达式:正负词

时间:2018-11-20 15:02:40

标签: regex

我正在尝试在URL匹配正则表达式中同时匹配否定词和肯定词。

“ Word1”和“ Word2”为负数,“ Word3”为正数。该网址必须具有肯定关键字,而不能具有否定关键字。

https://example.net

https://example.net/word3-匹配

https://example.net/word3/word2-不匹配

https://example.net/word3/word1-不匹配

目前,我也排除了首页,但是我认为肯定匹配是没有必要的。

^((?!(word1|word2|http(s?):\/\/example\.net\/?($|[?#][&=#+%0-9a-zA-Z]+$))).)*$

如何仅在一个字符串中使用正负匹配?

2 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式:

^(?=.*word3)(?!.*word(?:1|2)).*$

首先从匹配字符串start开始,然后为look ahead使用正数'word3',然后为negative look ahead使用'word',后跟任意一个 1或2。

最后,它与字符串的其余部分匹配(如果它已通过测试)。

答案 1 :(得分:0)

如果支持肯定的lookarounds,则可以使用:

在您的示例中,您同时使用了示例和示例,但是我在这里使用了示例。

^(?!.*\bword[12]\b)(?=.*\bword3\b)https?://example\.net/word\d.*$

这将匹配:

  • ^声明字符串的开头
  • (?!.*\bword[12]\b)断言右边的否定词不是word1word2
  • (?=.*\bword3\b)肯定右边的断言是word3
  • https?://example\.net/word\d匹配网址的开头,后跟/ word和一个数字。
  • .*匹配任意字符0次以上
  • $声明字符串的结尾

Regex demo