如何REGEX匹配和子串不匹配

时间:2014-11-01 04:08:14

标签: javascript php regex match

如果匹配并且不匹配子字符串,如何组合正则表达式?

例如:

http://www.domain.com/user.php?query=blah
http://www.domain.com/member.php?query=blah
http://www.domain.com/user.php?query=blah&context=DkUdh8ShTkNNkwoIJkl
http://www.domain.com/member.php?query=blah&context=DkUdDh8ShTaDfkNNkwoIJkl

我想获取包含"user.php""member.php"的网址但是如果包含"context"

我不想获取网址

匹配网址,如果包含" user.php"和" member.php"我可以用:

(user\.php|user\.php)

如果不包含" context":

^((?!context).)*$

如何合并(user\.php|user\.php)^((?!context).)*$

我的结果应该是:

http://www.domain.com/user.php?query=blah
http://www.domain.com/member.php?query=blah

感谢您的帮助...

3 个答案:

答案 0 :(得分:2)

使用此模式
<击> ^(?=.*(?:user|member))(?!.*context).*$
做到:

^(?=.*\/(?:user|member)\b\.php)(?!.*context).*$

Demo


^                           # begining of string
(?=.*\/(?:user|member)\.php)        # look ahead for "/user.php" or "/memeber.php"
(?!.*context)               # negative look ahead for "context"
.*$                      # anything to the end

答案 1 :(得分:1)

您可以使用Negative Lookahead执行此操作。

^(?!.*context).*\b(?:user|member)\.php.*$

Live Demo

答案 2 :(得分:0)

^(?=.*?(?:\buser\b|\bmember\b)\.php)(?:https?:\/\/)?[^/]*/(?:(?!context).)*$

你可以尝试一下。参见演示。

http://regex101.com/r/yG7zB9/14