web-dev-qa-db-ja.com

複数の条件を持つtextpad8正規表現

Superuser.comのTextPad正規表現の投稿をすべて検索しましたが、クエリに対する回答が見つかりませんでした。それは-TextPad8ファイル検索の正規表現で2つの条件を提供するにはどうすればよいですか?特に、ErrorまたはWarningという文字列を含むすべてのファイルのすべての行を検索したいのですが、これは正規表現error|warningを使用して実行できますが、それに加えて、これらの行のサブセットのみを選択したいと思います。別の指定されたテキスト文字列、例: expirは、最初の正規表現からの一致する文字列の場所の前後の、行のどこにも存在しません。

2つの正規表現の間に&&&のような接続詞を配置するさまざまな形式を試しましたが、機能する構文が見つかりません。 TextPadの正規表現には、ゼロ幅アサーションの先読みと後読みのサポートが含まれていますか? Perlでは、私は言うことができます

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

。それをTextPadに入力したところ、エラーは発生しませんでしたが、機能しませんでした。 errorまたはwarningのいずれかを含むすべての行を選択しましたが、expirも含む行は除外しませんでした。

1
fireblood

この正規表現は、必要なものを見つけます。

^(?=(?:(?!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行目のみに一致します。

2
Toto