problem mit preg_match_all

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

  • problem mit preg_match_all

    hi,
    beim versuch eine html seite zu parsen um einen bestimmten string heraus zuflitern habe ich folgendes Problem.

    gefilter werden soll alles was zwischen:
    <span id=\"ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin\">

    und </span>

    hier der code:

    PHP-Code:
    $string1 "<span id=\"ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin\">";
    $endstring "<span>";  

    $file file_get_contents($urlFalse);
     
    preg_match_all('|$string1(.*?)$endstring|',$file$match);


    print_r ($match); 
    irgendwas ist falsch, nur was ???

    dabke grüssse mike

  • #2
    Variablen werden zwischen '' nicht interpoliert sondern nur zwischen "".

    Aber am besten benutzt du 'string'.$variable.'string'
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      preg_quote($variable), um regex-syntax zu escapen.

      The special regular expression characters are: . \ + * ? [ ^ ] $ ( ) { } = ! < > | :

      Kommentar


      • #4
        ok danke aber was heisst das nun für mein pregMatch_all ?

        wie muss das aussehen ?

        grüsse mike

        Kommentar


        • #5
          so in etwa:
          preg_match_all('|'.preg_quote($string1).'.*'.preg_quote($endstring).'|isU', $file, $match);

          ungetestet, aber das kannst du ja machen
          leicht abgeändert - die syntax (.*?) mag ich nicht, mit den modifiern isU liegt man aber immer richtig.

          Kommentar


          • #6
            hmmm..... wieder danke, aber ich komm nicht drauf, die anweisung:
            preg_match_all('|'.preg_quote($string1).'.*'.preg_quote($endstring).'|isU', $file, $match);

            print_r ($match);

            ergibt als ergebniss: Array ( [0] => Array ( ) )

            grüsse mike

            Kommentar


            • #7
              beschreibe doch erst mal, was du erreichen willst. wenn du den inhalt von span brauchst, dann musst du ihn in klammern setzen, damit er im treffer-array gefunden wird.

              schau dir regexp-evaluator.de an, da gibt es tolle erklärungen.

              Kommentar


              • #8
                zwischen

                <span id=\"ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin\">

                und </span>

                steht z.B. 1,88

                das will ich haben den wert der dazwischen steht.

                grüsse mike

                Kommentar


                • #9
                  ok, also?

                  zeig mal das entgültige pattern, wenn du es ausführst.

                  Kommentar


                  • #10
                    also
                    PHP-Code:
                    $string1 "<span id=\"ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin\">";
                    $endstring "<span>";

                    $file='<span id="ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin">
                    match1
                    <span>
                    blub
                    <span id="ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin">
                    match2
                    <span>'
                    ;

                    preg_match_all('|'.preg_quote($string1).'.*'.preg_quote($endstring).'|isU'$file$match);

                    echo 
                    htmlentities(print_r($matchtrue)); 
                    ergibt bei mir treffer.
                    nur .* müsste dann doch geklammert werden (.*), um darauf zugreifen zu können.

                    acho, file() liefert ein array zurück, preg_match_all() hätte aber gerne einen string.
                    also implode() oder file_get_contents, oder (1000 wege führen nach rom) benutzen.

                    Kommentar


                    • #11
                      also ich hab das jetzt so und ich bin zu blöd dazu das hinzukriegen, sorry:

                      es sieht jetzt so aus:

                      PHP-Code:
                      $string1 "<span id=\"ctl00_ctl00_content_MainContent_PlayerContent1_lblScorePerMin\">";
                      $endstring "<span>";

                      $file file_get_contents($urlFalse);

                      preg_match_all('|'.preg_quote($string1).'(.*)'.preg_quote($endstring).'|isU'$file$match);

                      echo 
                      htmlentities(print_r($matchtrue)); 

                      ausgabe:
                      Array ( [0] => Array ( ) [1] => Array ( ) )


                      WAAAAAAAAAFRRRRRRRRUUUUUUUUUUMMMMM !!! *heul*

                      Kommentar


                      • #12
                        weil das pattern nicht auf den string zutrifft.

                        auf der o.g. seite kannst du üben, allerdings musst du dafür testausgaben machen, um exakt zu wissen, wie der zu durchsuchende string und dein pattern aussieht.

                        Kommentar


                        • #13
                          ja das weis ich aber ich will ja wissen wie das pattern aussehen muss damit es auf den string zutrifft.....

                          kann mir das jemand posten bitte...*verzewifel*

                          danke für eure geduld
                          grüsse mike

                          Kommentar


                          • #14
                            was mir auch aufgefallen ist, dass bei $endstring = "<span>"; der / fehlt.

                            Kommentar


                            • #15
                              zeige doch endlich die genannten testausgaben.

                              Kommentar

                              Lädt...
                              X