Hallo,
ein besserer Titel für meine Frage ist mir leider nicht eingefallen 😉
Ich suche einen regulären Ausdruck, der ein Wort matcht, welches folgendes enthält (alles optional):
Den gesuchten Wörtern ist immer eine Reihe von Doppelpunkten vorangestellt.
Beispiel (die gesuchten Wörter in großer Schrift):
::<>mT❔MFN1:********0340+>SO❔iPhone
Mein Ansatz ist, die Wörter mittels Capture Groups auszulesen. Folgende Regex ist mir bisher eingefallen:
:+([\w\d(\:question:)]+)
Das funktioniert nicht 100%, da der Doppelpunkt nach MFN1 im Match enthalten ist (was nicht sein soll):
Hier kann man damit rumspielen:
Frage: welche Regex matcht die gesuchte Zeichenfolge, aber ignoriert ':' ohne vorangestelltes Fragezeichen?
Gruß
Manchmal hilft es, das Problem zu formulieren und dann kommt man von selbst auf die Lösung ... 😁
Ich habe es einfach so gelöst, dass ich vor dem Matchen die Zeichenfolge '❔' durch '' ersetze. Dann gibt es beim Matchen keine Konflikte mit den anderen Doppelpunkten.
Als Regex verwende ich dann statt
:+([\w\d(\:question:)]+)
diese:
:+([\w\d\\]+)
Sieht ein wenig nach UN/EDIFACT aus.
Falls ich damit ins Schwarze treffe, würde ich empfehlen es nicht per Regex zu machen sondern einen (wenn auch minimalistischen) Parser zu schreiben - erstens deshalb, weil die Strings im Normalfall einer gewissen Struktur entsprechen und zweitens weil sowohl das Escape-Zeichen (das Fragezeichen ?) als auch das Komponenten-Trennzeichen (der Doppelpunkt :) über das UNA Segment angepasst/auf andere Zeichen geändert werden können.
Hallo sugar76,
die Klimmzüge mit dem vorherigen Ersetzen sind nicht nötig. Du kannst einfach eine (Regex-)Alternative verwenden. Also dein Pattern minimalinvasiv umgesetzt, würde dann zu:
:+((\w|\d|?:)+)
oder
:+([\w\d]|?:)+)
herbivore
PS: Ein passender Titel wäre gar nicht so schwer zu finden gewesen, z.B. "Regex: Wort aus Ziffern, Buchstaben und einer Zeichenfolge" oder noch kürzer "Regex: Wort aus Zeichen und Zeichenfolge"