textpad 8 expressão regular com várias condições

1

Eu pesquisei todas as postagens regex do TextPad no superuser.com e não encontrei uma resposta para minha consulta. É - como posso fornecer duas condições em uma expressão regular de pesquisa de arquivos do TextPad 8? Em particular, eu quero encontrar todas as linhas em todos os arquivos que contenham as cadeias de erro ou aviso, o que eu posso fazer usando o regex error|warning , mas, além disso, eu quero selecionar apenas o subconjunto dessas linhas onde outro especificado string de texto, por exemplo expir , não está presente em nenhum lugar nas linhas, antes ou depois da localização da string correspondente da primeira regex.

Eu tentei várias formas de colocar uma conjunção como & ou && entre os dois regexes, mas não consigo encontrar uma sintaxe que funcione. TextPad regular expressões incluem suporte para lookahead e lookbehind asserções de largura zero? Em perl, eu poderia dizer

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

Eu inseri isso no TextPad, e isso não causou erros, mas também não funcionou. Ele selecionou todas as linhas que continham error ou warning , mas não excluíram as linhas que também continham expir .

    
por fireblood 19.09.2017 / 17:59

1 resposta

2

Esta regex encontrará o que você deseja:

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

Explicação:

^                       : 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"
    )   

com um arquivo como:

error
warning
abc expir 
abc expir warning
abc error expir def

corresponde apenas às linhas 1 e 2.

    
por 20.09.2017 / 12:08

Tags