preg_match

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

  • preg_match

    hallo zusammen...

    bräucht bitte mal eure hilfe...

    hab folgenden php code:
    PHP-Code:
    <?php
        error_reporting
    (E_ALL);
        
    $text"testtext <td class=\"fp_beg_data2\">hallo</td> weiß nicht";
        if(
    preg_match('/<td class="fp_beg_data[1|2]">hallo<\/td>/'$text)) {
            echo 
    "Regex matched";
        } else {
            echo
    "Regex hat nicht gepasst";
        }
    ?>
    so hier klappt alles wunderbar und und ich krieg "Regex matched"

    nun möchte ich dass zwischen den beiden <td>'s ein beliebiger text stehen kann damit er trotzdem gefunden wird,
    dann hätte ich das preg_match wie folgt geändert
    PHP-Code:
    preg_match('/<td class="fp_beg_data[1|2]">[a-zA-Z]<\/td>/',$text
    allerdings funktioniert das nicht, ich bekomm immer "Regex hat nicht gepasst"

    könnt ihr mir bitte sagen wieso das nicht geht und was ich falsch mache?

    danke im voraus für eure hilfe....

    gruß magic11
    shit happens

  • #2
    Re: preg_match

    Vielleicht möchtest du der Zeichenklasse noch einen geeigneten Quantifier folgen lassen - damit nicht nur genau ein Zeichen einen Treffer bedeuten würde.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      in der eckigen klammer braucht es zudem kein | .
      Zuletzt geändert von heiss; 20.07.2006, 10:59.

      Kommentar


      • #4
        @wahsaga, dankeschön.

        hab mich zwar ein klein wenig mit regulären ausdrücken und so beschäftigt allerdings is des meiner meinung nach ein nicht gerade einfaches thema.....

        wie gesagt dankeschön.

        ich meld mich wenn i wieder was brauchen würde

        mfg
        shit happens

        Kommentar


        • #5
          hi, evtl. hilft dir das ein wenig weiter

          PHP-Code:
          $TEXT "testtext <td class=\"fp_beg_data2\">hallo</td> weiß nicht";

              if(
                  
          preg_match(
                      
          "/<td class=\"fp_beg_data[0-9]\">[a-zA-Z]*<\/td>/",
                      
          $TEXT
                  
          )
              ){
                  echo 
          "Regex matched";
              } else {
                  echo
          "Regex hat nicht gepasst";
              }
          # oder
              
          if(
                  
          preg_match(
                      
          "/<td [^ ]*?>[a-zA-Z]*<\/td>/",
                      
          $TEXT
                  
          )
              ){
                  echo 
          "Regex matched";
              } else {
                  echo
          "Regex hat nicht gepasst";
              } 
          wenn noch zahlen im TD sein dürfen dann das nehmen

          PHP-Code:
          [a-zA-Z0-9]* 
          MfG SuRaXor

          Kommentar


          • #6
            hi leute.....

            jetzt hätte ich nochmal ein problem mit dem preg_match.....

            und zwar ich hab in einer datei diese html zeile(hab die zeilen etwas gekürzt):
            PHP-Code:
            <td class="Tab2">&nbsp;18.08.</td><td class="Tab2">&nbsp;<class="Tab2">1. FC Nürnberg</a></td>
            <
            td class="Tab2">&nbsp;<class="Tab2">Borussia Mönchengladbach</a></td
            so ich möchte mir nun die beiden Bundesligamannschaften per preg_match auslesen.

            hätte das so versucht:
            PHP-Code:
               $mannschaft = array("Bayern München","Borussia Dortmund","Hamburger SV","Arminia Bielefeld",
            "FC Schalke 04","Eintracht Frankfurt",
                                            
            "Bayer Leverkusen","TSV Alemannia Aachen",
            "VfB Stuttgart","1. FC Nürnberg","Borussia Mönchengladbach",
                            
            "Energie Cottbus","1. FSV Mainz 05",
            "VfL Bochum","Hannover 96","SV Werder Bremen","VfL Wolfsburg","Hertha BSC Berlin");

            for(
            $i=0;$i<18;$i++)
                        {        
                            if(
            preg_match('/'.$mannschaft[$i].'<\/a>/'$array[$x],$text))
                            {
                                
                                
            $hilfs_laenge_1 strlen($mannschaft[$i]);
                                
            $hilfs_laenge_1 += 5;
                                
            $text[0] = substr($text[0],-$hilfs_laenge_1,-4);
                                

                                if(
            $y == 2)
                                {
                                    
            $spieltag"INSERT INTO `bulli_begegnungen` ( `spielnr` , `datum` , `heim` , 
            `toreheim` , `toregast` , `gast` )
             VALUES (NULL , '
            $dat', '$man_1[1]', '0', '0', '$man_1[2]')";
                                    echo 
            $spieltag."<br>";
                                    
            $result mysql_query($spieltag);
                                }                    
                            }
                            
                        } 
            nur leider schaff ich es immer nur dass ich nur 1 mannschaft auf einmal auslese..... ich bräucht aber beide auf einmal damit ich sie als spielbegegnung eintragen kann in die datenbank.....

            könntet ihr mir bitte nochmal helfen bzw sagen wie ich das ganze realisiere?
            hab etwas im manuel gekuckt aber da wird irgendwie immer nur davon ausgegangen dass ein gesuchter ausdruck nur 1x in einer zeile vorkommt...

            danke für eure bemühungen....

            mfg magic11
            Zuletzt geändert von Magic11; 23.07.2006, 09:52.
            shit happens

            Kommentar


            • #7
              Hi Magic11

              Dein Ansatz könnte sein:
              für die erste Mannschaft
              <a>Mannschaft</a>...</a>

              für die zweite Mannschaft
              </a>...<a>Mannschaft</a>

              und dies in deiner 18er Schleife.

              die drei Punkte, das heisst beliebiger Text sind in regexp ausgedrückt:
              Code:
              .*
              Ich würde als pattern delimiter nicht / nehmen, sondern #, weil das / auch im regexp pattern vorkommt.
              Ich würde noch die modifiers Ui setzen, dh am Schluss /Ui anstatt nur /, bzw. #Ui anstatt nur # wenn Du mein # als pattern delimiter nimmst. U steht für Ungreedy, i für gross/klein nicht unterscheiden.

              Wenn es auf die Reihenfolge der Mannschaften nicht ankommen würde, kann man auch die ersten zwei Resultate in einen array speichern, wofür es ncoh eine Zählvariable brauchen würde.

              Du gehst ausserdem davon aus, dass nur 1 Spielbegegnung im $text ist.

              Kommentar


              • #8
                @h31ss
                ein klein wenig hast mir weiter geholfen ....allerdings klappts leider immer noch.......

                ich hab im anhang jetzt mal die zeile rein gepackt die ich durchsuchen muss nach der spielbegegnung.....

                mein quelltext sieht jetzt wie folgt aus:
                PHP-Code:
                for($i=0;$i<18;$i++)
                            {        
                                if(
                preg_match('#<a .*>'.$mannschaft[$i].'</a>.*</a>#'$array[$x],$text))
                                {
                                    
                $hilfs_laenge_1 strlen($mannschaft[$i]);
                                    
                $hilfs_laenge_1 += 9;
                                    
                $text[0] = substr($text[0],-$hilfs_laenge_1,-9);
                                    
                                    
                $man_1 $text[0];
                                    
                                    echo 
                "das ist mannschaft 1: ".$man_1."<br>";                
                                }
                                
                                if(
                preg_match('#</a>.*<a .*>'.$mannschaft[$i].'</a>#'$array[$x], $text_2))
                                {
                                    
                $hilfs_laenge_1 strlen($mannschaft[$i]);
                                    
                $hilfs_laenge_1 += 5;
                                    
                $text_2[0] = substr($text_2[0],-$hilfs_laenge_1,-4);
                                
                                    
                $man_2 $text_2[0];
                                    
                                    echo 
                "das ist mannschaft 2: ".$man_2;
                                    
                                    
                                    
                $spieltag"INSERT INTO `bulli_begegnungen` ( `spielnr` , `datum` , `heim` , `toreheim` ,
                                                      `toregast` , `gast` ) VALUES (NULL , '
                $dat', 
                                                        '
                $man_1', '0', '0', '$man_2')";
                                    echo 
                $spieltag."<br>";
                                    
                //$result = mysql_query($spieltag);
                                                        
                                
                }
                            } 
                das problem ist jetzt dass der erste reguläre ausdruck nicht mehr auf die 1. vorkommende mannschaft zutrifft wieso auch immer?
                vielleicht könntest mir bitte nochmal helfen....

                wie gesagt ist eine txt datei die die zu durchsunden zeile enthält wo ich mir die beiden mannschaften rausfiltern müsste.

                danke mal im voraus für die hilfe.....
                shit happens

                Kommentar


                • #9
                  hier wäre der anhang

                  so ich hoff das mit dem anhang klappt jetzt.....
                  Angehängte Dateien
                  shit happens

                  Kommentar


                  • #10
                    Ich gllaube das liegt an der Extraktion aus $text[0] beziehungsweise $text_2[0].

                    Du kannst Dir mal das ganze $text[0] bzw. $text_2[0] ausgeben lassen zur Kontrolle, vor der Extraktion mit substr.

                    edit: bei $man2 weisst Du, wieviel noch nachher kommt, nämlich </a>
                    bei $man1 kommt viel mehr und unbekannt wieviel, nämlich </a>...</a>

                    nicht-edit: $man1 und $man2 kannst du aus $mannschaft[$i] haben, das muss nicht aus $text kommen. Damit fallen auch die Rechnungen weg und das substr.

                    Zuletzt geändert von h31ss; 23.07.2006, 14:20.

                    Kommentar


                    • #11
                      Ausserdem solltest du den INSERT erst nach der Schleife machen, oder dann zumindest erst wenn Du beide Mannschaften hast (also darauf prüfen). Es kann sein, dass du die zweite Mannschaft zuerst findest. Bei Hertha gegen Bayern findest Du die Mannschaft 2 zuerst.

                      Kommentar


                      • #12
                        danke @h31ss du warst jetzt die rettung mit dem tipp dass ich ja die mannschaft auch durch das $mannschaft[$i] bekomme....
                        da spar ich mir ja die ganzen dinge wie substr und so.....

                        hab den wald vor lauter bäumen anscheinend nicht gesehen.....

                        danke nochmal.....hab nochmal eine etwas andere testversion hergenommen und mit der funktionert das jetzt wunderbar.

                        hier der code dazu:
                        PHP-Code:
                        <?php
                         
                           
                        include "functions.inc.php";
                           
                        Connect();
                           
                        $mannschaft = array("Bayern München","Borussia Dortmund","Hamburger SV","Arminia Bielefeld","FC Schalke
                         04"
                        ,"Eintracht Frankfurt",
                                                        
                        "Bayer Leverkusen","TSV Alemannia 
                        Aachen"
                        ,"VfB Stuttgart","1. FC Nürnberg","Borussia Mönchengladbach",
                                        
                        "Energie Cottbus","1. FSV Mainz 05","VfL Bochum","Hannover 96","SV Werder Bremen","VfL Wolfsburg","Hertha BSC Berlin");


                            
                        $url1='text2.html';
                            
                            
                        $array file($url1);
                            
                        $k=0;
                            for(
                        $x=0;$x<count($array);$x++)
                            {

                                
                        $y=0;
                                    for(
                        $i=0;$i<18;$i++)
                                    {        
                                        if(
                        preg_match('/'.$mannschaft[$i].'<\/a>/'$array[$x],$text))
                                        {
                                            if(
                        $y == 0)
                                            {
                                                
                        $man_1 $mannschaft[$i];
                                            }

                                            if(
                        $y == 1)
                                            {
                                                
                        $man_2 $mannschaft[$i];
                                                
                        $spieltag"INSERT INTO `bulli_begegnungen` ( `spielnr` , `datum` , `heim` , `toreheim` ,
                                                          `toregast` , `gast` ) VALUES (NULL , '
                        $dat', 
                                                            '
                        $man_1', '0', '0', '$man_2')";
                                                
                        $result mysql_query($spieltag);
                                            }
                                            
                        $y++;
                                        }
                                        
                                    }        
                            }    
                        ?>
                        so trägt er mir jetzt die vorhanden begegnungen wunderbar in die datenbank ein........

                        danke nochmals.....

                        mfg magic11
                        shit happens

                        Kommentar


                        • #13
                          bitte, die Hilfe ist gern geschehen.
                          Aber so bekommst Du die Reihenfolge nicht richtig. Mit den zwei verschiedenen patterns bekommst du die erste und die zweite Mannschaft richtig. Dann ist die Logik um zuwissen dass man beide hat, etwas anders, aber man muss auch "auf zwei zählen".

                          soviel ich weiss, ist die erstgenannte Mannschaft Heimmannschaft?

                          Dein pattern ist jetzt nur '/' . $mannschaft . '</' , inklusive die pattern delimiters. Was nachher kommt sind (ungültige) modifiers, nämlich a>/ .
                          Also besser wieder auf # umsteigen, und die modifiers Ui nach dem schliessenden pattern delimiter # einbauen.
                          Zuletzt geändert von h31ss; 23.07.2006, 15:26.

                          Kommentar


                          • #14
                            ja genau hast recht das ist mir gerade vorher aufgefallen als ich mir die spieltage angesehen habe.....

                            also wenn ich dich jetzt richtig verstanden habe dann muss ich das preg_match so umändern:

                            PHP-Code:
                            preg_match('#<a .*>'.$mannschaft[$i].'</a>.*</a>#Ui'$array[$x],$text
                            ist das so richtig?

                            und zusätzlich muss ich nochmal eine zweite if-abfrage mit einem preg_match machen das dann so aussieht:

                            PHP-Code:
                            preg_match('#</a>.*<a .*>'.$mannschaft[$i].'</a>#Ui',$array[$x],$text
                            oder hab ich da was falsch verstanden?....
                            brauch ich noch was?
                            shit happens

                            Kommentar


                            • #15
                              ich hab das ganze jetzt mal so probiert:

                              PHP-Code:
                                 $mannschaft = array("Bayern München","Borussia Dortmund","Hamburger SV","Arminia Bielefeld",
                                                               
                              "FC Schalke 04","Eintracht Frankfurt","Bayer Leverkusen","TSV Alemannia Aachen",
                                               
                              "VfB Stuttgart","1. FC Nürnberg","Borussia Mönchengladbach",
                                              
                              "Energie Cottbus","1. FSV Mainz 05","VfL Bochum","Hannover 96",
                                              
                              "SV Werder Bremen","VfL Wolfsburg","Hertha BSC Berlin");


                                  
                              $url1='text2.html';
                                  
                              $y=0;
                                  
                              $array file($url1);
                                  for(
                              $x=0;$x<count($array);$x++)
                                  {
                                      if(
                              preg_match('/<td class=\"Tab[1|2]\">&nbsp;[0-9]{2}.[0-9]{2}.<\/td>/'$array[$x],$datum))
                                      {
                                          if(
                              $datum[0] != "")
                                          {
                                              
                              $datum[0] = substr($datum[0],-11,-5);
                                              
                              $datum[0] .= "2006";
                                              
                              $dat $datum[0];
                                          }
                                      }
                                      
                                          for(
                              $i=0;$i<18;$i++)
                                          {
                                              
                                              if(
                              preg_match('#<a .*>'.$mannschaft[$i].'</a>.*</a>#Ui'$array[$x],$text))
                                              {
                                                  if(
                              $y == 0)
                                                  {
                                                      
                              $man_1 $mannschaft[$i];
                                                      echo 
                              "das ist mannschaft 1: ".$man_1."<br>";
                                                      
                              $y++;
                                                  }
                                              }
                                              if(
                              preg_match('#</a>.*<a .*>'.$mannschaft[$i].'</a>#Ui',$array[$x],$text))
                                              {
                                                  if(
                              $y == 1)
                                                  {
                                                      
                              $man_2 $mannschaft[$i];
                                                      echo 
                              "das ist mannschaft 2: ".$man_2."<br>";

                                                      
                              $y=0;
                                                      
                              $man_1="";
                                                      
                              $man_2="";
                                                  }
                                                  
                                              }
                                              
                                          }        
                                  } 
                              so bei den ersten 9 begegnungen eines spieltages klappt das auch wunderbar....sobald aber die nächsten 9 begegnungen kommen kommt das script irgendwie durcheinandner.....

                              ich weiß allerdings nicht wieso?......

                              Zuletzt geändert von Magic11; 23.07.2006, 17:17.
                              shit happens

                              Kommentar

                              Lädt...
                              X