2009-05-18 3 views
9

у меня есть следующие строки:Regex для согласования линий, которые не содержат слово

Message:Polarion commit Mon May 18 06:59:37 CEST 2009 
Message:Polarion commit Fri May 15 19:39:45 CEST 2009 
Message:424-18: use new variable 
Message:Polarion commit Fri May 15 19:29:10 CEST 2009 
Message:Polarion commit Fri May 15 19:27:23 CEST 2009 
Message:000-00: do something else 
Message:Polarion commit Fri May 15 17:50:30 CEST 2009 
Message:401-103: added application part 
Message:Polarion commit Fri May 15 17:48:46 CEST 2009 
Message:Polarion commit Fri May 15 17:42:04 CEST 2009 

и я хочу, чтобы получить все строки, не содержащие «Polarion»

как бы я это сделать?

пса: я видел: Regex to match against something that is not a specific substring , но это не помогает мне

ПФСА: я пытаюсь сделать это в TortoiseSVN для выбора сообщений журнала, и я думаю, что есть проблема с «негативным просмотром назад "

+0

Просьба указать код отступа и примеры текстовых файлов с четырьмя пробелами, чтобы обеспечить правильное форматирование. Вы можете сделать это, выбрав текст и нажав ctrl-k. Приветствия. – Stephan202

+0

Не все двигатели регулярных выражений поддерживают отрицательный lookbehind - TortoiseSVN, скорее всего, тот, который этого не делает. –

ответ

9

Возможно, было бы проще, если бы ваше регулярное выражение соответствовало тому, что вы ищете, а затем отмените результаты.

Большинство инструментов с помощью Regex позволит вам полностью изменить результаты поиска, как правило, вызывая опцию 'v' для в V ERT (держа я за прецедентного I nsensitive):

например

grep -v <search> 
find /v <search> 

т.д.

+0

Хммм, первый жирный текст, v в инвертированном виде отображается в предварительном просмотре, но выглядит неправильно ... –

+0

Звездочки не предназначены для использования внутри слова, но ... должен работать. Это не первый раз, когда панель предварительного просмотра дает фиктивные результаты. –

+0

+1, это именно то, что я искал – Claudiu

19

Это expresion будет делать эту работу.

^(?:.(?<!Polarion))*$ 

Он использует нулевой ширины отрицательное утверждение с просмотром назад утверждать, что строка не содержит «Polarion».

 
    ^    Anchor to start of string 
    (?:    Non-capturing group 
     .    Match any character 
     (?<!Polarion) Zero-width negative lookbehind assertion - text to the 
         left of the current position must not be "Polarion" 
    ) 
    *     Zero or more times 
    $     Anchor to end of string 

Следующая версия будет выполнять утверждение только после «n» - возможно, это будет быстрее, возможно, медленнее.

^(?:[^n]*|n(?<!Polarion))*$ 
+1

Интересный ответ, но grep -v намного проще. –

+0

Вау помог мне с другими текстовыми редакторами и java :-). Благодарю. –

+0

отлично работает в блокноте ++ – BurnsBA

0

Я не мог найти какую-либо информацию о том, что с помощью регулярных выражений TortoiseSVN, но вы можете спросить на mailing list. Не все двигатели поддерживают расширенные функции, такие как отрицательный внешний вид с нулевой шириной.

3

Вот решение с использованием отрицательного предпросмотра, который более широкой поддержкой, чем назад ':

^Message:(?!Polarion).*$ 

(Кроме того, так как мы знаем, где может появиться Polarion, нам не нужно делать какие-либо из бессмысленнога . модные вещи Даниэль предложил)


Объяснение этого выражения в регулярных выражениях комментария формы, это:

(?x)  # Enable comments 
^   # Start of string (start of line in multiline mode) 
Message: # Literal text 
(?!  # Begin negative lookahead 
Polarion # Literal text 
)   # End negative lookahead 
.*   # Greedily match any number of any character 
$   # End of string (end of line in multiline mode) 
0

Это сработало для меня и быстро заходит (в диалоговом окне поиска и т. П.): ^(?!.*not this).*but this

+0

вы можете показать некоторые примеры работы –

0

Как показано на рисунке this answer, окно поиска TortoiseSVN не ограничивается регулярными выражениями. В частности, если выражение заключено в !(), оно отрицается, и в результате появляются несоответствующие строки. ! отменяет заключенное выражение (регулярное или нет).

В вашем случае,

!(Polarion) 

должен сделать трюк.

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