Peter P.: Regulärer Ausdruck mit preg_split

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.

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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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

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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. 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.

          1. Hallo,

            habe es jetzt doch geschafft den Ausdruck zu formulieren. Die Lösung ist: (?<!\d)\s(?=\d)|/|(?<=\d)\s(?=\w)

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

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
  2. Ich denke die Vorschrift wäre:

    Zerlege den String anhand von Leerzeichen und /.  Zerlege alphabetische Zeichen und numerische ?

  3. gudn tach!

    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

    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