2014-10-06 4 views
0

У меня есть файл (в основном лог-файл) - со следующими линиями в нем:Matching строки, которая не содержит фрагмент - с использованием регулярных выражений

Error; 1 no match CIRCLE more. 
Info; 2 should not match 
Error; 3 should : match SHAPE 'abc'. 
Debug; 4 should not match 
Error; 5 CIRCLE/again 
Error; 6 TRIANGLE should match 

Я хочу найти/матч все полное линии, начинающиеся с «Ошибка»; но в этой строке нет слова «CIRCLE». Поэтому я хочу, чтобы найти строки 3 и 6:

Error; 3 should : match SHAPE 'abc'. 
Error; 6 TRIANGLE should match 

Узор Я начинаю с (Error;).+ дает мне все «ошибки» линии, но я не знаю, как исключить те CIRCLE. Я думаю, что должно быть что-то очень простое, используя [^ ... ] или смотреть вперед.

Здесь я играл с ним на сайте: http://regexr.com/39kig

ответ

3
^Error(?!.*?circle).*$ 

Попробуйте this.Do не забудьте установить i, m, g flags.See демо.

http://regex101.com/r/hQ1rP0/17

+0

это работает, и был первый ответ, спасибо за помощь – TarasB

+0

@TarasB ваше добро пожаловать !!!!! 111 – vks

2

Используйте ниже регулярное выражение, которое использует negative lookahead. Не забудьте добавить многострочный модификатор, если ваше регулярное выражение содержит анкеры (^ - который обозначает начало строки, $ - означает конец строки).

^Error;(?!.*?CIRCLE).*$ 

DEMO

> var r = "Error; 1 no match CIRCLE more.\nInfo; 2 should not match\nError; 3 should : match SHAPE 'abc'.\nDebug; 4 should not match\nError; 5 CIRCLE/again\nError; 6 TRIANGLE should match"; 
undefined 
> var m = r.match(/^Error;(?!.*?CIRCLE).*$/gm) 
undefined 
> console.log(m) 
[ 'Error; 3 should : match SHAPE \'abc\'.', 
    'Error; 6 TRIANGLE should match' ] 
+0

Спасибо Авинаш - это работает слишком – TarasB

+0

Вы радушны. , –

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