AndreR: preg_split soll Trenner behalten

Hallo,
ich habe hier eine Funktion, die unter Zuhilfenahme von preg_split einen Text anhand verschiedener Merkmale in ein Array aufteilt. Das klappt soweit auch perfekt.

Allerdings hätte ich gerne, dass die Trennzeichen nicht entfernt werden sondern erhalten bleiben und ebenfalls in das Array kopiert werden. Wie kann ich das denn erreichen?

Danke schon einmal.

André

  1. Guten Morgen,

    Allerdings hätte ich gerne, dass die Trennzeichen nicht entfernt werden sondern erhalten bleiben und ebenfalls in das Array kopiert werden. Wie kann ich das denn erreichen?

    Indem Du Dir mal die moeglichen Parameter von preg_split genau durchliest.

    Viele Gruesse,
    der Bademeister

    1. Indem Du Dir mal die moeglichen Parameter von preg_split genau durchliest.

      Sofern du auf "PREG_SPLIT_DELIM_CAPTURE" hinaus willst - der hat keinen Einfluss zu haben. Jedenfalls bleiben die Trenner trotzdem verschollen.

      Ich trenne gerade wie folgt:
      $splits = preg_split($reg, $line, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

      André

      1. Hi AndreR!

        Sofern du auf "PREG_SPLIT_DELIM_CAPTURE" hinaus willst - der hat keinen Einfluss zu haben. Jedenfalls bleiben die Trenner trotzdem verschollen.

        Dann ließ dir die Beschreibung zu diesem Flag nochmal genau durch:
        PREG_SPLIT_DELIM_CAPTURE
            Falls dieses Flag gesetzt ist, werden auch die _eingeklammerten_
            Ausdrücke des Trennsymbol-Suchmusters erfasst und zurückgegeben.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hallo Hopsel

          Dann ließ dir die Beschreibung zu diesem Flag nochmal genau durch:

          Danke für den Hinweis. Jetzt werden die Trennzeichen übernommen. Es gibt aber noch ein Problem: Die Trennzeichen werden dem getrennten Satz nicht angehängt sondern es werden im Array separate Einträge erzeugt. Lässt sich das irgendwie umgehen?

          Danke,
          André

          1. Hi AndreR!

            Die Trennzeichen werden dem getrennten Satz nicht angehängt sondern es werden im Array separate Einträge erzeugt. Lässt sich das irgendwie umgehen?

            Die Frage ist, warum du das umgehen möchtest?
            Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen. Und da du dieses Array mit einer for-Schleife der Schrittweite 2 durchlaufen kannst, sollte die Verarbeitung kein Problem darstellen.

            Du kannst natürlich auch preg_match_all verwenden und das Suchmuster so aufbauen: Kein Trennzeichen in beliebiger Anzahl vielleicht gefolgt von einem Trennzeichen.
            Beispiel:

            $ip = '192.168.200.120';  
            $matches = array();  
            preg_match_all('~[^.]+(?:\.)?~',$ip,$matches);
            

            MfG H☼psel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
            1. Hi Hopsel,

              Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen.

              hier muss man ein bissi aufpassen. Da Andre PREG_SPLIT_NO_EMPTY gesetzt hat, wird das nicht immer stimmen.

              Viele Gruesse,
              der Bademeister

              1. Hi Bademeister!

                Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen.
                hier muss man ein bissi aufpassen. Da Andre PREG_SPLIT_NO_EMPTY gesetzt hat, wird das nicht immer stimmen.

                Sehr wichtiger Hinweis. Danke!
                In diesem Fall muss dieses Flag natürlich raus und in der for-Schleife entsprechend auf Leerheit™ geprüft werden.

                MfG H☼psel

                --
                "It's amazing I won. I was running against peace, prosperity, and incumbency."
                George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
            2. Moin,

              Die Frage ist, warum du das umgehen möchtest?
              Mit preg_split hast du eben in jedem zweiten Arrayeintrag das jeweilige Trennzeichen. Und da du dieses Array mit einer for-Schleife der Schrittweite 2 durchlaufen kannst, sollte die Verarbeitung kein Problem darstellen.

              Ich bräuchte es halt genau in diesem Format für die Weiterverarbeitung. Und wenn man es direkt so ausgeben könnte erspare ich mir komplizierte Nachverarbeitung.

              Ich kann es also nicht direkt in diesem Format spalten?

              André

              1. Hi AndreR!

                Ich kann es also nicht direkt in diesem Format spalten?

                Doch. Ich habe dir doch zwei Möglichkeiten genannt...

                MfG H☼psel

                --
                "It's amazing I won. I was running against peace, prosperity, and incumbency."
                George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
                1. Hi AndreR!

                  Ich kann es also nicht direkt in diesem Format spalten?
                  Doch. Ich habe dir doch zwei Möglichkeiten genannt...

                  ... wobei eine davon die geüwnschte Funktionalität besitzt. =)

                  MfG H☼psel

                  --
                  "It's amazing I won. I was running against peace, prosperity, and incumbency."
                  George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
                  Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
          2. Hi,

            Jetzt werden die Trennzeichen übernommen. Es gibt aber noch ein Problem: Die Trennzeichen werden dem getrennten Satz nicht angehängt sondern [...]

            Wo sollten sie denn "angehängt" werden, wenn du bspw. "abc|xyz" am | splittest - hinter dem abc, oder vor dem xyz ...?

            Du siehst, diese Anforderung ist auch noch nicht eindeutig genug.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.