textpad 8 регулярное выражение с несколькими условиями

1179
fireblood

Я просмотрел все публикации регулярных выражений TextPad на superuser.com и не нашел ответа на свой запрос. Это - как я могу предоставить два условия в регулярном выражении поиска файла TextPad 8? В частности, я хочу найти все строки во всех файлах, которые содержат строки Error или Warning, что я могу сделать с помощью регулярного выражения error|warning, но в дополнение к этому, я хочу выбрать только подмножество тех строк, где другая указанная текстовая строка, например expir, не присутствует нигде в строках, до или после местоположения совпадающей строки из первого регулярного выражения.

Я пробовал различные формы размещения соединения, например &или &&между двумя регулярными выражениями, но не могу найти синтаксис, который работает. Включают ли регулярные выражения TextPad поддержку преднамеренных и косвенных утверждений нулевой ширины? В Perl, я мог бы сказать,

 (?<!expir).*?error|warning(?!.*?expir) 

, Я ввел это в TextPad, и это не вызвало ошибок, но это также не работало. Он выбрал все строки, которые содержали либо errorили, warningно не исключающих линии, которые также содержатся expir.

1
Чтобы проверить, если что-то НЕ присутствует, вы должны использовать эту конструкцию: `((?! Expir).) *`, Так что ваше регулярное выражение становится: `^ ((?! expir).) * (?: error | warning) ( (?! expir).) * $ ` Toto 7 лет назад 0
Работает как шарм! Спасибо, Тото! :-) fireblood 7 лет назад 0

1 ответ на вопрос

2
Toto

Это регулярное выражение найдет то, что вы хотите:

^(?=(?:(?!expir).)*$).*(?:error|warning) 

Объяснение:

^ : begining of line (?= : start lookahead (?: : start non capture group (?!expir) : negative lookahead, make sure w don'thave expir You may want to add wordboundaries if you don't want to match "expiration" (?!\bexpir\b) . : any character but newline )* : group may appear 0 or moe times $ : end of line ) : end of lookahead at this point we are sure we don't have "expir" in the line so, go to match the wanted words .* : 0 or more any character but newline (?: : start non capture group error : literally error, you could do "\berror\b" if you don't want to match "errors" | : OR warning : literally warning, you could do "\bwarning\b" if you don't want to match "warnings" )  

С файлом вроде:

error warning abc expir  abc expir warning abc error expir def 

это соответствует только строкам 1 и 2.

Похожие вопросы