1

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

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

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

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

1 ответ1

2

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

^(?=(?:(?!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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .