Textpad 8 regulärer Ausdruck mit mehreren Bedingungen

1262
fireblood

Ich habe alle TextPad-Regex-Einträge auf superuser.com durchsucht und keine Antwort auf meine Anfrage gefunden. Es ist - wie kann ich zwei Bedingungen in einem regulären Ausdruck der TextPad 8-Dateisuche angeben? Insbesondere möchte ich alle Zeilen in allen Dateien finden, die die Zeichenfolgen Fehler oder Warnung enthalten. Dies kann ich mit dem regulären Ausdruck tun. Darüber error|warninghinaus möchte ich nur die Teilmenge der Zeilen auswählen, in denen eine andere angegebene Textzeichenfolge angegeben ist. ist beispielsweise expirnirgendwo in den Zeilen vor oder nach dem Ort der übereinstimmenden Zeichenfolge des ersten regulären Ausdrucks vorhanden.

Ich habe verschiedene Formen ausprobiert, um eine Konjunktion wie &oder &&zwischen den beiden Regexen zu setzen, kann aber keine funktionierende Syntax finden. Enthalten reguläre Ausdrücke von TextPad Unterstützung für Lookahead- und Lookbehind-Assets mit einer Breite von null? In Perl könnte ich sagen

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

. Ich habe das in TextPad eingegeben und es hat keine Fehler verursacht, aber es hat auch nicht funktioniert. Es ausgewählt alle Linien, die entweder enthalten erroroder warningaber nicht ausschließen Linien, die auch enthalten expir.

1
Um zu testen, ob etwas NICHT vorhanden ist, müssen Sie diese Konstruktion verwenden: `((?! Expir).) *` So wird Ihre Regex: `^ ((?! Expir).) * (?: error | warning) ( (?! Ablauf).) * $ ` Toto vor 7 Jahren 0
Klappt wunderbar! Danke, Toto! :-) fireblood vor 7 Jahren 0

1 Antwort auf die Frage

2
Toto

Diese Regex findet, was Sie wollen:

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

Erläuterung:

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

Mit Datei wie:

error warning abc expir  abc expir warning abc error expir def 

es entspricht nur den Zeilen 1 und 2.