preg_match_all

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

  • preg_match_all

    Hallo!
    Gibt es bei preg_match_all eine Möglichkeit Unterausdrücke nicht als solche anzuführen?

    mein Beispiel:
    $suchmuster="!(\[img]).*(images/your_p2b/).*(.jpg)\[/img]!i";

    Ich erhalte dann unterausdrücke wie:
    [ img]http://localhost/kisi/CMS/cms/images/your_p2b/winter.jpg[/img]
    [img]
    images/your_p2b/
    .jpg

    Eigendlich brauche ich ja nur einen unterausdruck... die restlichen entsehen ja nur, weil ich die unterausdrücke zur Gruppierung der Zeichen benötige.

  • #2
    Imho kann man nur durch die Klammerung im Regexp die Subterme festlegen oder eben nicht.
    Benutze einfach nur die Werte im Trefferarray, die dich interessieren. Der Rest hat halt ein paar µs Zeit verbraten, die du mit einer anderen Suchstrategie sicher auch nicht wieder reinholst.

    Übrigens brauchst du die Klammern in deinem Ausdruck gar nicht, kann das sein?

    Kommentar


    • #3
      die du nicht brauchst, kannst du mit ?: kennzeichnen
      (?: .....)
      Slava
      bituniverse.com

      Kommentar


      • #4
        Wieder was gelernt. (Kann man so geklammerte Terme referenzieren? Ich geh mal nachlesen ...)
        EDIT:
        Nein, kann man nicht. Subpatterns mit ?: sind nur "grouping", nicht "capturing"; aber nur "capturing" Subpatterns kann man referenzieren.
        Zuletzt geändert von onemorenerd; 04.09.2006, 16:14.

        Kommentar


        • #5
          ja, hier würde ich sie für normal nicht benöten... ist ja nur ein Beispiel gewesen.

          Das mit dem ?: wusste ich gar nicht. thx

          Kommentar


          • #6
            @onemorenerd
            habe ich was falsch verstanden?
            PHP-Code:
            <?php
            error_reporting
            (E_ALL);

            $TXT = <<<Inhalt
            The Quick 15 Brown Fox Jumped Over The Lazy Dogs. 
            The Quick Brown Fox Jumped Over The Lazy 30 Dogs.
            Inhalt;

            $pattern '/(\\w+(\\s\\w+))/';
            // und jetzt das gleiche mit
            //$pattern = '/(\\w+(?:\\s\\w+))/';
            //oder so
            //$pattern = '/(?:\\w+(?:\\s\\w+))/';

            preg_match_all($pattern$TXT$array);

            echo 
            '<pre>'print_r($arraytrue), '</pre>';

            ?>
            Zuletzt geändert von Slava; 04.09.2006, 16:49.
            Slava
            bituniverse.com

            Kommentar


            • #7
              Ich meinte "im regulären Ausdruck referenzieren", wie es hier beschrieben wird.

              Kommentar


              • #8
                Original geschrieben von onemorenerd
                Ich meinte "im regulären Ausdruck referenzieren", wie es hier beschrieben wird.
                alles klar!
                Ich habe einfach seine Frage so verschtanden,
                und habe dabei $n bzw \n nicht vor den Augen gehabt :-)
                Slava
                bituniverse.com

                Kommentar

                Lädt...
                X