mit spliti ein regex muster finden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mit spliti ein regex muster finden

    Ich versuche jetzt schon seit Stunden, einen regulären Ausdruck zusammen zu basteln, aber irgend wie klappt das nicht.
    Der spliti, soll an folgenden Muster in $input den String teilen:
    |*|*|balance|*|
    Wobei * irgend welche beliebige Zeichen und Zahlen sind.

    Code:
    $closed = spliti("/|(.+?)|(.+?)|balance|(.+?)|/",$input);
    Kann mir da jemand weiter Helfen, wo der Fehler liegt?
    Zuletzt geändert von alexPHP; 28.06.2011, 11:12.

  • #2
    spliti() ist veraltet und sollte nicht mehr verwendet werden.

    Warum verwendest du nicht einfach explode()? Das sollte hier doch vollkommen ausreichen.

    Kommentar


    • #3
      Zitat von h3ll Beitrag anzeigen
      Warum verwendest du nicht einfach explode()? Das sollte hier doch vollkommen ausreichen.
      Nur über Umwege, da
      * irgend welche beliebige Zeichen und Zahlen sind.
      Aber ein Blick ins : preg_split

      Kommentar


      • #4
        Zitat von TobiaZ Beitrag anzeigen
        Nur über Umwege
        Wieso?
        PHP-Code:
        $parts explode('|'$string);
        echo 
        $parts[3]; 

        Kommentar


        • #5
          @h3ll: nicht „|“ ist das Trennzeichen, sondern „|*|*|balance|*|“, also /\|[^|]*\|[^|]*\|balance\|[^|]*\|/
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Zitat von h3ll Beitrag anzeigen
            Wieso?
            PHP-Code:
            $parts explode('|'$string);
            echo 
            $parts[3]; 
            Damit wird alles an den Stellen mit | geteilt.
            Es sollte aber an der Stelle |*|*|balance|*| geteilt werden.
            Einfach sieht der Inhalt so aus
            Das ist irgend ein Text|1a2b3|3c4d5|balance|*|Und hier noch, ein Text
            Nicht an den |
            Alles was davor steht und alles was danach steht sollte in einem array sein.

            $array[0] = "Das ist irgend ein Text|1a2b3|3c4d5|balance|abc|";
            $array[1] = "Und hier noch, ein Text";

            RTFM preg_split hab ich gemacht, aber das Problem ist ja nicht der Befehl, sondern der Reguläre Ausdruck.

            $closed = preg_split("/|(.+)|(.+)|balance|(.+)|/",$input);

            Kommentar


            • #7
              Zitat von alexPHP Beitrag anzeigen
              aber das Problem ist ja nicht der Befehl, sondern der Reguläre Ausdruck.

              $closed = preg_split("/|(.+)|(.+)|balance|(.+)|/",$input);
              „|“ ist ein Sonderzeichen und trennt Alternativen ("/a|b/" matcht „a“ oder „b“). Daher musst du es escapen: \|

              Da reguläre Ausdrücke meist als Strings angegeben werden, ergibt sich eine weitere Stufe des Escapings, da der Backslash in Strings wieder eine Sonderbedeutung hat, also kommst du am Ende bei
              PHP-Code:
              "/\\|[^|]*\\|[^|]*\\|balance\\|[^|]*\\|/i"

              // gleichbedeutend mit

              <<<EOD
              /\|[^|]*\|[^|]*\|balance\|[^|]*\|/i
              EOD; 
              raus.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Zitat von AmicaNoctis Beitrag anzeigen
                @h3ll: nicht „|“ ist das Trennzeichen, sondern „|*|*|balance|*|“, also /\|[^|]*\|[^|]*\|balance\|[^|]*\|/
                Oh, da war ich mit meinem Post zu schnell. Das wars, was ich gesucht habe! Danke!!

                Kommentar

                Lädt...
                X