2010-04-28 3 views
6

У меня есть этот Regex:Regex представлять «НЕ» в группе

<(\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 

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

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

ответ

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

negative lookahead (здесь: '(?!MSWinEventLog)') должно быть достаточно:

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

+0

Haha Это точный ответ, который я хочу. В любом случае, спасибо вам большое. –

1

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

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

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

+0

Это тоже правильно. благодаря –

Смежные вопросы