Regex mit beliebig vielen Zeichen?
Ich will eine Regex mit der Pattern: Wort, das mit S beginnt und mit D aufhört. Dazwischen darf alles stehen.
Bisher habe ich ^SD$. Was kommt dazwischen, um beliebige Zeichen zu erlauben?
3 Antworten
Das hier dürfte die mit Abstand beste / eleganteste / sauberste / robusteste Lösung sein:
↑ Das ist Text und kein Bild. Kannst du also ganz normal in die Zwischenablage zur Weiternutzung kopieren!
Frage ist was dazwischen darf alles stehen bedeutet. Geht es nur um Zeilen oder kann das Wort mehrfach kommen, sprich etwas ala:
SnjkfdngkD asdjsndjk SnsjdkfndD
Oder reden wir von einer Zeile, dazwischen können aber auch Sonderzeichen oder Leerzeichen sein?
S nsdjkfsndjfk D
Da du "Wort" schreibst klingt das für mich nach Ersten. Ich würde wohl etwas wie Folgendes nehmen:
(?<=(^|\s))S[^\s]*D(?=($|\s))
- Das schaut, dass vorne der Zeilenanfang ist oder ein Whitespace, das soll den Wortanfang darstellen.
- Anschließend schaut es nach dem großen S.
- Dann können beliebig oft etliche Zeichen außer Whitespaces kommen.
- Danach das große D.
- Und entweder das Zeilenende oder ein Whitespace, was das Wortende darstellt.
Ob das nun aber das ist, was du suchst und brauchst weiß ich nicht, dafür fehlen entsprechende Informationen, ob wir mehrere Wörter haben oder eine Zeile matchen, was "alles" ist, was dazwischen sein darf usw.
Wenn es nur um eine Zeile geht, sprich Zeilenanfang S und Zeilenende D und es auch mehrere Wörter sein können, dann reicht natürlich:
^S.*D$
Das ist in dem Fall ja auch noch ein "Wort", was mit einem großen S beginnt und mit einem großen D endet. Daher sagte ich ja auch, die Fragestellung ist zu ungenau bzw. lässt zu viel Interpretationsspielraum.
Wenn wir davon ausgehen, dass ein großes D das "Wort" abschließt und ein Wort nix ist, was ein Word Boundary hat oder ein Whitespace dahinter, dann passt deine Lösung natürlich.
Wobei dann auch wieder die Frage ist ob dazwischen darf alles stehen auch beinhaltet, dazwischen muss was stehen oder ob SD ebenso gehen sollte, dann müsste natürlich ein * statt einem + verwendet werden.
S.*D+
nix gut , das findet wirklich das größte wo ein S und irgendwo danach ein D ist , egal was dazwischen steht .
Sicher habe ich eine Dame
findet : Sicher habe ich eine D
wenn wir von casesentitiv ausgehen
Sehe gerade, es gibt auch Word Boundaries, sprich die Lookaheads/Behinds könnte man einfach durch:
ersetzt. Also:
Dann haste auch bei . und , ein Wortende. Kommt eben drauf an was du wirklich brauchst.