textpad 8 регулярное выражение с несколькими условиями
Я просмотрел все публикации регулярных выражений TextPad на usersuper.ru и не нашел ответа на свой запрос. Это - как я могу предоставить два условия в регулярном выражении поиска файла TextPad 8? В частности, я хочу найти все строки во всех файлах, которые содержат строки Ошибка или Предупреждение, что я могу сделать с помощью регулярного выражения error|warning
, но в дополнение к этому, я хочу выбрать только подмножество тех строк, где другая указанная текстовая строка, например expir
, нет нигде в строках, до или после расположения совпадающей строки из первого регулярного выражения.
Я пробовал разные формы соединения &
или же &&
между двумя регулярными выражениями, но не может найти синтаксис, который работает. Включают ли регулярные выражения TextPad поддержку преднамеренных и косвенных утверждений нулевой ширины? В Perl, я мог бы сказать,
(?<!expir).*?error|warning(?!.*?expir)
, Я ввел это в TextPad, и это не вызвало ошибок, но это также не работало. Он выбрал все строки, которые содержали либо error
или же warning
но не исключил строки, которые также содержали expir
,
1 ответ
Это регулярное выражение найдет то, что вы хотите:
^(?=(?:(?!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.