Regulärer Ausdruck mit preg_split
Peter P.
- php
Hallo,
ich habe ein Problem einen regulären Ausdruck zu formulieren, der mir Zeichenketten in dieser Form:
Hallo Test 666/84 A15 91 X
Hallo 666/84 R15 51 A
zu Hallo TEST | 666 | 84 | A15 | 91 | X bzw.
Hallo | 666 | 84 | R15 | 51 | A
zerlegen soll. Bis jetzt habe ich \s|/ probiert, so zerlegt er mir aber die 1. Zeichenkette in:
Hallo | TEST | 666 | 84 | A15 | 91 | X bzw.
Ich bedanke mich für jede Hilfe.
hi,
zu Hallo TEST | 666 | 84 | A15 | 91 | X bzw. [...]
zerlegen soll. Bis jetzt habe ich \s|/ probiert, so zerlegt er mir aber die 1. Zeichenkette in:Hallo | TEST | 666 | 84 | A15 | 91 | X bzw.
Du willst also den Whitespace zwischen Hallo und Test anders behandelt wissen, als den restlichen.
Also muss dafür eine Vorschrift existieren - definiere diese.
gruß,
wahsaga
hi,
zu Hallo TEST | 666 | 84 | A15 | 91 | X bzw. [...]
zerlegen soll. Bis jetzt habe ich \s|/ probiert, so zerlegt er mir aber die 1. Zeichenkette in:Hallo | TEST | 666 | 84 | A15 | 91 | X bzw.
Du willst also den Whitespace zwischen Hallo und Test anders behandelt wissen, als den restlichen.
Also muss dafür eine Vorschrift existieren - definiere diese.gruß,
wahsaga
Ja und wie soll ich sie definieren ? Wenn ich es wüsste, würde ich hier nicht fragen
hi,
zitiere bitte vernünftig, und nicht gedankenlos alles.
Du willst also den Whitespace zwischen Hallo und Test anders behandelt wissen, als den restlichen.
Also muss dafür eine Vorschrift existieren - definiere diese.
Ja und wie soll ich sie definieren ?
Ich rede nicht von der Umsetzung in RegEx, sondern von der Definition deiner Anforderung.
Nach welcher Vorschrift willst du bestimmte Whitespaces berücksichtigen, andere nicht?
Nach Position, nach Mondphase, nach der rektal gemessenen Körpertemperatur deines Haustieres, ...?
Wenn ich es wüsste, würde ich hier nicht fragen
Solange du noch nicht selber weisst, was du willst, brauchst du überhaupt nicht fragen.
gruß,
wahsaga
Also die Zeichenketten, die ich aufgeführt habe, sind nicht statisch sondern dynamisch. Es kann vorkommen, dass am Anfang 2 reine Teilstrings durch ein Whitespace getrennt sind, diese 2 Teilstring sollen aber als ein String separiert werden. Es kann aber auch vorkommen, dass nur ein reiner Teilstring in der Zeichenkette vorkommt. Wie im Beispiel aufgeführt also entweder Hallo TEST oder nur Blabla.
Hallo,
habe es jetzt doch geschafft den Ausdruck zu formulieren. Die Lösung ist: (?<!\d)\s(?=\d)|/|(?<=\d)\s(?=\w)
Du willst also den Whitespace zwischen Hallo und Test anders behandelt wissen, als den restlichen. Also muss dafür eine Vorschrift existieren - definiere diese.
Ja und wie soll ich sie definieren ?
Wie sieht das abstrahierte Muster für 'Hallo TEST' unabhängig von deinen Beispieldaten aus? Ist es statisch, müssen es immer zwei aufeinander folgende Wörter sein oder egal, Hauptsache das zweite Wort heißt TEST oder oder oder?
Wenn ich es wüsste, würde ich hier nicht fragen
Du *musst* es wissen, sonst kannst du/kann man keinen Regulären Ausdruck daraus formulieren.
Siechfred
Ich denke die Vorschrift wäre:
Zerlege den String anhand von Leerzeichen und /. Zerlege alphabetische Zeichen und numerische ?
gudn tach!
Hallo Test 666/84 A15 91 X
Hallo 666/84 R15 51 Azu Hallo TEST | 666 | 84 | A15 | 91 | X bzw.
Hallo | 666 | 84 | R15 | 51 | A
z.b. in etwa so
preg_match('~^(.+) +(...)/(..) +(...) +(..) +(.)$~', 'Hallo Test 666/84 A15 91 X', $t);
print_r($t);
sieht so ein bissl nach reifenbezeichnungen aus. wenn ein bekanntes format zugrunde liegt, kann man das ja ausnutzen.
prost
seth