Regexp: Suche bis zu einer bestimmten Zeichenfolge
Franz Handlos
- sonstiges
0 steckl0 Franz Handlos0 seth
Guten Abend,
ich möchte aus einem String einen Teilstring ermitteln. Dabei soll der RegExp allerdings nur solange matchen, bis er auf eine bestimmte Zeichenfolge stösst. Etwa wie folgt:
Dies ist ein schöner Tag
Bis zum Wort 'schöner' soll gematched werden. Mein Problem ist, dass ich zwar weiss wie ich bis zu einem bestimmten Zeichen suche ([^X]+), nicht aber, wie ich bis zu einer bestimmten Zeichenfolge suche.
Weiss jemand wie das geht?
Schönen Abend noch,
Franz
Hi,
Bis zum Wort 'schöner' soll gematched werden. Mein Problem ist, dass ich zwar weiss wie ich bis zu einem bestimmten Zeichen suche ([^X]+), nicht aber, wie ich bis zu einer bestimmten Zeichenfolge suche.
Wenn du bis zu einem Wort suchen willst musst du
/^.*?Wort/
wenn du bis zum letzten vorkommen von einem Wort suchen willst musst du
/^.*Wort/ schreiben.
Wenn mindestens ein Zeichen vor dem Wort stehen soll musst du "*" durch "+" ersetzen.
Ob es Probleme mit dem "ö" gibt weiß ich nicht, denke aber nicht.
mfG,
steckl
Hallo steckl,
ich habe echt den Wald vor lauter Bäumen nicht gesehen, obwohl sowas eigentlich zu den einfacheren Dingen gehört...
MFG
Franz
gudn tach!
Wenn du bis zu einem Wort suchen willst musst du
/^.*?Wort/
wenn du bis zum letzten vorkommen von einem Wort suchen willst musst du
/^.*Wort/ schreiben.
wenn "Wort" wirklich bloss so ein simpler string ist, sind haeufig gewoehnliche string-positions-funktionen die bessere wahl, also sowas wie
substring(0 bis position("wort" in string)-1 von string)
wenn "wort" komplizierter, also selbst wieder ein regexp ist, dann gibt es uebrigens auch neben den bereits genannten moeglichkeiten noch "zero-width look-ahead assertions", vor allem im falle von suchen-und-ersetzen sind die nuetzlich.
beispiel:
/^(.*?)[fF]oo/
speichert alles, was vor dem ersten "foo" oder "Foo" kommt in $1.
soll das alles ersetzt werden, ohne dass "foo" bzw. "Foo" angetastet werden, dann kommen die "zero-width look-ahead assertions" zum einsatz:
s/^(.*?)[fF]oo/$1/
wuerde naemlich "foo" bzw. "Foo" ueberschreiben.
s/^(.*?)(?=[fF]oo)/$1/
wuerde ebendies nicht tun.
prost
seth