Как регулярное совпадение и не совпадает подстрока

Как объединить регулярное выражение, если совпадает и не соответствует подстроке?

Пример:

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

Я хочу получить URL, которые содержат "user.php" а также "member.php" НО я не хочу получать URL, если содержать "context"

Чтобы соответствовать URL, если они содержат «user.php» и «member.php», я могу использовать:

(user\.php|user\.php)

И если не содержит «контекст»:

^((?!context).)*$

Как совместить (user\.php|user\.php) а также ^((?!context).)*$ ?

Мои результаты должны быть:

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

Спасибо за помощь…

0

Решение

использовать этот шаблон
^(?=.*(?:user|member))(?!.*context).*$
сделай это:

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

демонстрация


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

Другие решения

Ты можешь использовать Негативный Lookahead сделать это.

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

Live Demo

1

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

Вы можете попробовать это. См. Демо.

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

0
По вопросам рекламы [email protected]