Regex для представления "НЕ" в группе - PullRequest
6 голосов
/ 28 апреля 2010

У меня есть это регулярное выражение:

<(\d+)>(\w+\s\d+\s\d+(?::\d+){2})\s([\w\/\.\-]*)(.*)

То, что я хочу сделать, это вернуть FALSE (не соответствует), если в третьей группе указано «MSWinEventLog», и вернуть «соответствует» для остальных.

<166>Apr 28 10:46:34 AMC the remaining phrase
<11>Apr 28 10:46:34 MSWinEventLog the remaining phrase
<170>Apr 28 10:46:34 Avantail the remaining phrase
<171>Apr 28 10:46:34 Avantail the remaining phrase
<172>Apr 28 10:46:34 AMC the remaining phrase
<173>Apr 28 10:46:34 AMC the remaining phrase
<174>Apr 28 10:46:34 Avantail the remaining phrase
<175>Apr 28 10:46:34 AMC the remaining phrase
<176>Apr 28 10:46:34 AMC the remaining phrase
<177>Apr 28 10:46:34 Avantail the remaining phrase
<178>Apr 28 10:46:34 AMC the remaining phrase
<179>Apr 28 10:46:34 Avantail the remaining phrase
<180>Apr 28 10:46:34 Avantail the remaining phrase

Как поместить " NOT 'MSWinEventLog'" в группу регулярных выражений ([\w\/\.\-]*)?

Примечание:
Вторая фраза, приведенная выше, должна возвращать «несоответствие»

Ответы [ 2 ]

8 голосов
/ 28 апреля 2010
<(\d+)>(\w+\s\d+\s\d+(?::\d+){2})\s(?!MSWinEventLog)([\w\/\.\-]*)(.*)

a отрицательный взгляд (здесь: '(?!MSWinEventLog)') должно быть достаточно:

Отрицательный взгляд необходим, если вы хотите сопоставить что-то, а не что-то другое .
Объясняя классы символов, я уже объяснил, почему нельзя использовать отрицательный класс символов , чтобы соответствовать «q», за которым не следует «u». Отрицательный взгляд обеспечивает решение: q(?!u).

1 голос
/ 28 апреля 2010

Вы можете сделать это с отрицательным прогнозом:

<(\d+)>(\w+\s\d+\s\d+(?::\d+){2})\s(?!MSWinEventLog)([\w\/.-])(.)
                                   -----------------

(?!MSWinEventLog) будет совпадать, только если не , за которым сразу следует выражение, соответствующее "MSWinEventLog".

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