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

Я настраиваю некоторые цели в Google Analytics и могу использовать небольшую помощь в регулярном выражении.

Допустим, у меня есть 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).)*$) 

Но я не уверен, как добавить в селектор = размер .

Любая помощь будет принята с благодарностью!

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

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

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

regex может быть (синтаксис perl):

 `/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/` 
 ^(?=.*selector=size)(?:(?!details\.cfm).)+$ 

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

 ^[^?]*+(? 

Я искал способ избежать буферизации на хвосте в той же ситуации, что и решение OP и Kobi отлично подходит для меня. В моем случае исключая строки с «ботом» или «пауком», включая «/» (для моего корневого документа).

Моя первоначальная команда:

 tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / ' 

Теперь становится (с переключателем «-P» perl):

 tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$' 

Простой способ сделать это – указать 0 экземпляров строки, выполнив следующие

 (string_to_exclude){0} 
  • Какое регулярное выражение соответствует квадратной скобке?
  • Существует ли регулярное выражение для определения правильного регулярного выражения?
  • Регулярные выражения и отрицание целой группы персонажей
  • Есть ли способ превратить вредоносный код в регулярное выражение?
  • Мое регулярное выражение подходит слишком много. Как заставить его остановиться?
  • Поддержка \ K в regex
  • Проверка правильности электронной почты Regex
  • Шаблон регулярного выражения для соответствия, Исключая, когда ... / За исключением между
  • Регулярное выражение для ограничения количества символов до 10
  • Получить окончательный специальный символ с регулярным выражением
  • Почему это регулярное выражение позволяет каретку?
  • Давайте будем гением компьютера.