Группа захвата имени Regex не содержит одно указанное c слово - PullRequest
2 голосов
/ 09 января 2020

У меня есть этот текстовый шаблон, который представляет собой Apache Журнал:

18.123.117.10 287.153.14.123 [08/Jan/2020:10:16:22 +0000] "GET /sport/home HTTP/1.1" 200 12345 122 "https://www.google.com" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" eb72d10e0-3f9f-42kf-3di6-ff40hegg49f85 1578478582510 1578478582612

Я строю регулярное выражение для извлечения реферера из этого журнала, который в нашем случае https://www.google.com:

^(?:[^\"\n]*\"){3}(?<referer>[^\"?]+)

Но мне нужно убедиться, что групповой реферер совпадает только в том случае, если в нем нет слова, например, я хочу получить все рефералы, которые не являются Google , Как я могу отредактировать это регулярное выражение, чтобы получить этот результат?

1 Ответ

3 голосов
/ 09 января 2020

Вы можете использовать в своем регулярном выражении отрицательный прогноз:

^(?:[^"\n]*"){3}(?<referer>(?![^"?]*\bgoogle\.)[^"?]+)

Демонстрация RegEx

(?![^"?]*\bgoogle\.) является отрицательным прогнозом, чтобы не дать совпадения, если google. опережает текущую позицию перед " или ?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...