Seite 1 von 1
RegEx Frage 2
Verfasst: Mittwoch 23. November 2011, 09:14
von Francesco
Hallo, zweite Frage zu einen regulären Ausdruck:
Ich möchte alle Zeilen finden, die mit { enden, jedoch nicht vom zeilenanfang bis { mit spaces gefüllt sind, d.h. irgendein non-whitespace character noch vor dem { auftreten.
Vielleicht denke ich verkehrt oder zu kompliziert:
Ich meine, spaces, wo vorher keine Zeilenanfang ist (darum das [^\^] gefolgt von 0 der mehr spaces und der Klammer, gefolgt von 0 oder mehr spaces und Zeilenende.
Das wird aber nicht gefunden:
Also gerade das Gegenteil. Anstatt
zu finden, findet der Ausdruck zB
Re: RegEx Frage 2
Verfasst: Mittwoch 23. November 2011, 09:31
von BlackJack
@Francesco: '[^\^]' passt auf alles ausser dem ^-Zeichen. Und da ist wirklich das Zeichen '^' gemeint und nicht der Zeilenanfang. Vielleicht (ungetestet): '^.*?[^ ].*\{'
Re: RegEx Frage 2
Verfasst: Mittwoch 23. November 2011, 09:45
von /me
Francesco hat geschrieben:Ich möchte alle Zeilen finden, die mit { enden, jedoch nicht vom zeilenanfang bis { mit spaces gefüllt sind, d.h. irgendein non-whitespace character noch vor dem { auftreten.
Falls auch nach der öffnenden geschweiften Klammer noch Whitespaces auftreten dürfen:
Edit: Das erste .* mit einem folgenden Fragezeichen nicht-greedy zu machen, wie BlackJack das getan hat, ist eine gute Idee um unnützes Backtracking zu vermeiden.
Re: RegEx Frage 2
Verfasst: Mittwoch 23. November 2011, 09:50
von Francesco
BlackJack hat geschrieben:@Francesco: '[^\^]' passt auf alles ausser dem ^-Zeichen. Und da ist wirklich das Zeichen '^' gemeint und nicht der Zeilenanfang. Vielleicht (ungetestet): '^.*?[^ ].*\{'
@BlackJack: Super, danke, funktioniert
Wenn man noch
hinten anfügt, findet er genau das, was ich möchte.
Re: RegEx Frage 2
Verfasst: Mittwoch 23. November 2011, 09:51
von Francesco
/me hat geschrieben:
Falls auch nach der öffnenden geschweiften Klammer noch Whitespaces auftreten dürfen:
Edit: Das erste .* mit einem folgenden Fragezeichen nicht-greedy zu machen, wie BlackJack das getan hat, ist eine gute Idee um unnützes Backtracking zu vermeiden.
Sehe gerade, /me hat das schon geschrieben, ja \s ist besser als space (nimmt dann die Tabulatoren auch noch mit)
Ja non-greedy ist ein guter Tip obendrein.
Noch eine Kleinigkeit: Das Negationszeichen [^a] (das hier a ausschliesst) kann ja m. Wissens nur direkt hinter der eckigen Klammer auf angeben. Gibt es eine Möglichkeit zu sagen alle nonwhitespaces ausser '/'. Aber so geht das nicht [\S^/].
Nachtrag: ist eigentlich eh kein Problem, weil man das invertierte hinten dranstellen kann.
Also [^/\s]