Pattern für preg_split()
TS
- php
- regex
0 dedlfix0 TS
0 Matthias Apsel0 Gunnar Bittersmann1 Jonny 5
Hallo und guten Abend,
kann man ein Pattern hinbekommen, dass dazu führt, dass nur x-mal am ersten Teil gesplittet wird und danach ein anderes Pattern zum Splitten gilt?
a hier-steht-ein-Text und hier, kommt der Rest: 20
Soll getrennt werden: 2x an den Whitespaces, dann 1x am Komma und dann am Doppelpunkt, wobei führende und anhängende Whitespaces von Splitteilen auch gerne gleich vernichtet werden können:
[0] => a
[1] => hier-steht-ein-Text
[2] => und hier
[3] => kommt der Rest
[4] => 20
Grüße
TS
Tach!
kann man ein Pattern hinbekommen, dass dazu führt, dass nur x-mal am ersten Teil gesplittet wird und danach ein anderes Pattern zum Splitten gilt?
Muss es denn unbedingt nur ein Pattern sein? Ich vermute, dass es nämlich nur in zwei/drei Schritten geht. Erst die x Mal, dann die letzte Fundstelle nach dem zweitem Muster. Und gegebenenfalls die Ergebnis-Arrays zusammenführen.
dedlfix.
Hallo und guten Abend,
kann man ein Pattern hinbekommen, dass dazu führt, dass nur x-mal am ersten Teil gesplittet wird und danach ein anderes Pattern zum Splitten gilt?
Muss es denn unbedingt nur ein Pattern sein? Ich vermute, dass es nämlich nur in zwei/drei Schritten geht. Erst die x Mal, dann die letzte Fundstelle nach dem zweitem Muster. Und gegebenenfalls die Ergebnis-Arrays zusammenführen.
Da es nur für den gelegentlichen Import von neuen Daten aus nachkontrollierten Webseiten dienen soll, habe ich es jetzt tatsächlich klassisch gelöst. Bis die Aufgabe wieder vorkommt, haben sich sicherlich die Begehrlichkeitén auch schon wieder erweitert, sodass ich ohnehin nachbessern muss ;-O
Grüße
TS
Hallo TS,
kann man ein Pattern hinbekommen, dass dazu führt, dass nur x-mal am ersten Teil gesplittet wird und danach ein anderes Pattern zum Splitten gilt?
a hier-steht-ein-Text und hier, kommt der Rest: 20
Soll getrennt werden: 2x an den Whitespaces, dann 1x am Komma und dann am Doppelpunkt, wobei führende und anhängende Whitespaces von Splitteilen auch gerne gleich vernichtet werden können:
Soll heißen, nach dem Doppelpunkt soll nicht mehr zerlegt werden? Kann der Doppelpunkt tatsächlich nur einmal vorkommen?
Falls ja, splitte zuerst am Doppelpunkt
$string = 'a hier-steht-ein-Text und hier, kommt der Rest: 20';
$parts = preg_split("/:/", $string);
$littleparts = preg_split("/[\s,]+/", "$parts[0]");
print_r($parts);
print_r($littleparts);
Die gesuchten Teile stecken dann in $littleparts[0] - $littleparts[count($littleparts)-1]
sowie parts[1]
Array
(
[0] => a hier-steht-ein-Text und hier, kommt der Rest
[1] => 20
)
Array
(
[0] => a
[1] => hier-steht-ein-Text
[2] => und
[3] => hier
[4] => kommt
[5] => der
[6] => Rest
)
Bis demnächst
Matthias
@@TS
kann man ein Pattern hinbekommen, dass dazu führt, dass nur x-mal am ersten Teil gesplittet wird und danach ein anderes Pattern zum Splitten gilt?
Kommt drauf an, was „x-mal“ heißen soll.
x = 2? So wie du es weiter unten erklärt hast?
Oder soll gar nicht erst an Whitespaces gesplittet werden, sondern zunächst einmal am Komma und danach dann der erste Teil an den Whitespaces, wie oft auch immer?
Bitte beschreibe dein Problem vollständig.
Wie soll hier gesplittet werden: "a b c d,e f:g"
so: "a", "b", "c d", "e f", "g"?
oder: "a", "b", "c", "d", "e f", "g"?
LLAP 🖖
Hi, scheint sich ja erledigt zu haben.
Man könnte preg_match
mit Capturing groups verwenden Siehe Beispiel auf eval.in. Müsstest du aber für jedes der "x mal" das Suchmuster entsprechend anpassen.
Soll getrennt werden: 2x an den Whitespaces
^(\S+)\s+(\S+)\s+
dann 1x am Komma
([^,]+),\s*
und dann am Doppelpunkt...
([^:]+):\s*
Was denn dann ergäbe: ^(\S+)\s+(\S+)\s+([^,]+),\s*([^:]+):\s*(.*)
(regex101 Demo & Erklärung)
Ob sowas nun deinen Erwartungen entspricht wage ich aber mal zu bezweifeln :p