preg_match

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

  • 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.

    Comment


    • #3
      in der eckigen klammer braucht es zudem kein | .
      Last edited by heiss; 20-07-2006, 10:59.

      Comment


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

        Comment


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

          Comment


          • #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
            Last edited by Magic11; 23-07-2006, 09:52.
            shit happens

            Comment


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

              Comment


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

                Comment


                • #9
                  hier wäre der anhang

                  so ich hoff das mit dem anhang klappt jetzt.....
                  Attached Files
                  shit happens

                  Comment


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

                    Last edited by h31ss; 23-07-2006, 14:20.

                    Comment


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

                      Comment


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

                        Comment


                        • #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.
                          Last edited by h31ss; 23-07-2006, 15:26.

                          Comment


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

                            Comment


                            • #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?......

                              Last edited by Magic11; 23-07-2006, 17:17.
                              shit happens

                              Comment

                              Working...
                              X