mit spliti ein regex muster finden

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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?
    Last edited by alexPHP; 28-06-2011, 10:12.

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

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

    Comment


    • #3
      Originally posted by h3ll View Post
      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

      Comment


      • #4
        Originally posted by TobiaZ View Post
        Nur über Umwege
        Wieso?
        PHP Code:
        $parts explode('|'$string);
        echo 
        $parts[3]; 

        Comment


        • #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]

          Comment


          • #6
            Originally posted by h3ll View Post
            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);

            Comment


            • #7
              Originally posted by alexPHP View Post
              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]

              Comment


              • #8
                Originally posted by AmicaNoctis View Post
                @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!!

                Comment

                Working...
                X