Регулярное выражение для строки, содержащей одно слово, но не другого

Я настраиваю некоторые цели в Google Analytics и мог использовать немного справки regex.

Позволяет говорят, что у меня есть 4 URL

http://www.anydotcom.com/test/search.cfm?metric=blah&selector=size&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah2&selector=style&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah3&selector=size&value=1
http://www.anydotcom.com/test/details.cfm?metric=blah&selector=size&value=1

Я хочу создать выражение, которое определит любой URL, который содержит строку selector=size, но НЕ содержит details.cfm

Я знаю, что для нахождения строки, которая НЕ содержит другую строку, я могу использовать это выражение:

(^((?!details.cfm).)*$)

Но, я не уверен, как добавить в selector=size части.

Любая справка значительно ценилась бы!

92
задан Chris Stahl 1 June 2010 в 20:21
поделиться

3 ответа

Это должно сделать это:

^(?!.*details\.cfm).*selector=size.*$

^.*selector=size.*$ должно быть достаточно ясно. Первый бит, (?!.*details.cfm), является отрицательным предвосхищением: перед подбором строки он проверяет, что строка не содержит "details.cfm" (с любым количеством символов перед ним).

129
ответ дан 24 November 2019 в 06:33
поделиться
^(?=.*selector=size)(?:(?!details\.cfm).)+$

Если ваш механизм regex поддерживает позитивные квантификаторы (хотя я подозреваю, что Google Analytics этого не делает), то, полагаю, для больших входных наборов это будет работать лучше:

^[^?]*+(?<!details\.cfm).*?selector=size.*$
1
ответ дан 24 November 2019 в 06:33
поделиться

регулярное выражение может быть (синтаксис perl):

`/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/`
4
ответ дан 24 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: