TS: Pattern für preg_split()

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

--
es wachse der Freifunk
http://freifunk-oberharz.de

akzeptierte Antworten

  1. 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.

    1. 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

      --
      es wachse der Freifunk
      http://freifunk-oberharz.de
  2. 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

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
  3. @@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 🖖

    --
    „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe
  4. 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