正则表达式包含一个字符串,但不包含另一个字符串

时间:2016-09-06 16:57:13

标签: regex regex-negation regex-lookarounds

我们的项目中有正则表达式匹配任何包含字符串的url “/ PDF /”:

(.+)/pdf/.+

需要对其进行修改,使其与包含“help”的网址不匹配

示例:

不应匹配:“/ dealer / help / us / en / pdf / simple.pdf” 应匹配:“/ dealer /us/en/pdf/simple.pdf”

2 个答案:

答案 0 :(得分:2)

如果支持外观,则很容易实现:

(?=.*/pdf/)(?!.*help)(.+)

请参阅a demo on regex101.com

答案 1 :(得分:0)

(?:^|\s)((?:[^h ]|h(?!elp))+\/pdf\/\S*)(?:$|\s)

首先匹配空格或行的开头

(?:^|\s)

然后我们匹配任何非h或任何h背后没有elp的内容,一次或多次+ ,直到我们找到/pdf/,然后匹配非空格字符\S任意次*

((?:[^h ]|h(?!elp))+\/pdf\/\S*)

如果我们想在help之后检测到/pdf/,我们可以从头开始重复匹配。

((?:[^h ]|h(?!elp))+\/pdf\/(?:[^h ]|h(?!elp))+)

最后,我们匹配或结束行/字符串($

(?:$|\s)

完整匹配将包括前导/尾随空格,并且应该被剥离。如果使用捕获组1,则无需剥离末端。

Example on regex101