我正在尝试在URL匹配正则表达式中同时匹配否定词和肯定词。
“ Word1”和“ Word2”为负数,“ Word3”为正数。该网址必须具有肯定关键字,而不能具有否定关键字。
https://example.net/word3/word2-不匹配
https://example.net/word3/word1-不匹配
目前,我也排除了首页,但是我认为肯定匹配是没有必要的。
^((?!(word1|word2|http(s?):\/\/example\.net\/?($|[?#][&=#+%0-9a-zA-Z]+$))).)*$
如何仅在一个字符串中使用正负匹配?
答案 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)
断言右边的否定词不是word1
或word2
(?=.*\bword3\b)
肯定右边的断言是word3
https?://example\.net/word\d
匹配网址的开头,后跟/ word和一个数字。.*
匹配任意字符0次以上$
声明字符串的结尾