Hallo Rolf,
- verwende bitte {1,3} statt {0,3}...
Das wars. Wenn ich das in meinem ursprünglichen Regex ersetze, wird der Betrag sowohl im String 12,34
als auch in test 12,34
gefunden:
([0-9]{0,3}([,.][0-9]{2}|,-|,–)?)
- funktioniert nicht
([0-9]{1,3}([,.][0-9]{2}|,-|,–)?)
- funktioniert
Die äußere Klammer kann natürlich, wie du geschrieben hattest, weg. Auch die anderen Optimierungen hab ich hier noch nicht übernommen.
Und zwar, weil ich mich frage, warum dieser Unterschied an dieser Stelle diese Auswirkung hat. Ich sage doch eigentlich nur, vor dem Komma können KEINE oder 3 Ziffern stehen.
Selbiges Verhalten gibt es auch bei folgender runtergebrochenen Variante:
Regex: \d{0,2}
String: test 111
Selektion:
Regex: \d{1,2}
String: test 111
Selektion: 11
Regex: \d{0,2}
String: 111
Selektion: 11
Regex: \d{1,2}
String: 111
Selektion: 11
Wie kommt es zu diesem unterschiedlichen Verhalten? Ich dachte gerade ich habs, aber irgendwie doch nicht. Ich kann mir den Ablauf nur so erklären:
"t" => Buchstabe => nicht gesucht => nächstes Zeichen
"e" => Buchstabe => nicht gesucht => nächstes Zeichen
"s" => Buchstabe => nicht gesucht => nächstes Zeichen
"t" => Buchstabe => nicht gesucht => nächstes Zeichen
" " => Leerzeichen => nicht gesucht => nächstes Zeichen
"1" => Ziffer => gesucht => Bedingung {0,2} nicht erfüllt => Abbruch
Aber eigentlich inkludiert doch {0,3} das einmalige Vorkommen der 1. Und warum funktioniert der Regex mit dem String "111"? Da müsste dann ja auch abgebrochen werden. Ich bin verwirrt...
- …Oder willst Du unbedingt ",50" erkennen können? Wenn ich {0,3} verwende, erhalte ich eine Menge "Nulltreffer".
Aber ",50" wird mit deinem Regex auch gefunden 🤔
Herzlichen Dank ein weiteres Mal für deine Hilfe.
Schöne Grüße
Nico R.