preg_match problem... :(

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

  • preg_match problem... :(

    Hallo Leute,

    ich wollte mich mal an die Regulären ausdrücke wagen, aber bin selbst recht schnell verzweifelt.

    Mein Problem ist: Ich muß aus einem HTML Text alle Links finden und diese ersetzen. Z.B.:
    ... blabla irgendein text... <a href="http://www.php-resource.de">Php Seite</a> ... bla bla hier geht der Text weiter...

    soll dann nach dem ersetzen so aussehen
    ... blabla irgendein text... <a href="http://www.meineseite.de/redirect.php?link=1">Php Seite</a> ... bla bla hier geht der Text weiter...


    soll heißen ich brauche die URL und die linkbezeichnung zwichen den A Tags, um diese in eine Datenbank zu speichern.

    Nun hab ich im Internet auch eine gutes Suchmuster gefunden:
    $pattern = '=^(.*)<[aA] (.*)href\="?(\S+)"([^>]*)>(.*)</[aA]>(.*)$=msi';

    Aber Problem ist die versagt wenn in einer Zeile zwei links sind... bzw er findet dann nur den letzten.

    Hier mal meine Funktion die den HTML Code durchlaufen soll:

    PHP-Code:
    function HTML_Rewrite_A($qc$Params=false)
    {
       
    $pattern '=^(.*)<[aA] (.*)href\="?(\S+)"([^>]*)>(.*)</[aA]>(.*)$=msi';

       while (
    preg_match($pattern$qc$txt) && intval($a)<1000)        
       {
            
    $a++;
            
    // Hier würde die speicherung in der DB stehen...                  
            
    $qc $txt[1]."[a href=\"".$track_URL."?url=".$url_code."&r_code={r_code}".$url_befehl."\"href]".$txt[5]."[/a]".$txt[6];        

       }
       
    // dann würd ich  [a href] und [/a] wieder in tags verwandeln und fertig..
       // geht nur nicht immer 
       
    return $qc;

    Wär echt cool wenn mir jemand helfen könnte.
    Danke schon mal im vorraus.

    Greetz CaS

  • #2
    wenn man m und s in einem pattern verwendet, sollte man sich über nix wundern :P
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Und was bedeutet das s und / oder m?

      Hab das $pattern im internet gefunden...
      welches soll ich denn weg lassen das s oder das m?

      Gruß CaS
      Zuletzt geändert von CasparJones; 20.04.2004, 10:49.

      Kommentar


      • #4
        s -> bezug auf zeile
        m -> bezug auf gesamten text

        tipp: lesen -> tutorial auf php-resource "reguläre ausdrücke von sky"
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          OK habs mir durchgelesen...
          so 100 % hab ich das jetzt nicht verstanden, hab das m auch rausgeholt.

          Problem besteht immer noch.
          Bei solchen Links funktionierts:
          <P><A href="http://www.yahoo.de.vu/">Yahoo</A> <A href="http://www.knuddels.de/">Ein anderer Chat</A></P>

          Aber bei solchen nicht:
          <FONT size=-1><A href="http://www.google.de/intl/de/ads/">Werbung</A> - <A href="http://toolbar.google.com/intl/de/">Google Toolbar</A>

          Das steht dann in der DB als Linkname:
          "Werbung</A>
          - [a href="http://robin.internal/tracking.php?url=114&r_code={r_code}"href]Google Toolbar"
          und das
          "Google Toolbar</A>
          - [a href="http://robin.internal/tracking.php?url=113&r_code={r_code}"href]Alles über Google"

          Warum erkennt der das </A> tag denn nicht ((
          Kannst du oder jemand anderes mir das erklären?

          Greetz Caspar

          Kommentar


          • #6
            mach mal statt (.*) das da (.*?)
            h.a.n.d.
            Schmalle

            http://impressed.by
            http://blog.schmalenberger.it



            Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
            ... nur ohne :-)

            Kommentar


            • #7
              Jaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
              Krass danke das geht jetzt wunderbar
              *strahl* Der Tag ist gerettet

              Vielen Lieben Dank und einen wunderschönen Tag noch

              Greetz CaS

              Kommentar


              • #8
                seufz... doch noch ein problem...
                der findet auch anker...
                also wenn im text
                <A target=_blank name=tips>site tip of the day</A>

                steht dann verschwindet da einiges...
                so wie ich die pattern verstanden habe dürfte er sowas doch gar nicht finden weil kein href drin steht oder????

                Vieleicht kannst du mir auch bei dem problem helfen?

                Gruß Frank

                Kommentar


                • #9
                  Original geschrieben von CasparJones
                  so wie ich die pattern verstanden habe dürfte er sowas doch gar nicht finden weil kein href drin steht oder????
                  doch.

                  ein deinem pattern steht
                  Code:
                  href="?
                  - und die bedeutung des quantifiers ? ist nun mal "finde 0 oder 1 vorkommen des vorangehenden musters".

                  ersetze diesen teilausdruck also durch einen, der explizit das vorkommen von http=" an dieser stelle genau ein mal fordert.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Bezieht sich das ? nicht nur auf ein Zeichen davor? Also das "
                    wenn es da ist ist es in ordnung wenn nicht auch nicht schlimm???
                    Oder ist wirklich das komplette href=" gemeint?

                    Habs jetzt auch mal rausgeholt aber mit dem selben effekt...
                    die zeile nach dem Anker verschwindet einfach

                    Diese Regulären ausdrücke sind wirklich ziemlich kompliziert *seufz*
                    Aber ich glaube wenn man sie gut beherscht sind sie auch sehr mächtig

                    Was bedeutet eigentlich (\S+)???

                    Kommentar


                    • #11
                      Original geschrieben von CasparJones
                      Bezieht sich das ? nicht nur auf ein Zeichen davor? Also das "
                      ähm, ja, auch möglich ...

                      (dann ist es aber recht sinnfrei, das erste " optional zu machen, dass zweite aber zu fordern ...)
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        stimmt... naja wie oben erwähnt ich hatte die pattern aus dem internet und wusste da noch nicht wozu was genau war.

                        Mitlerweile weiß ich so ungefähr was was bedeutet und hab das ? auch gleich raus geholt

                        Hab jetzt noch ne zusätzliche schleife drüber gebaut die mir erstmal alle Anker verändern soll:
                        PHP-Code:

                                    $pattern 
                        '=^(.*?)<a (.*?)name\=(\S+)>(.*?)$=si';
                                    while (
                        preg_match($pattern$qc$txt) && intval($a)<1000)
                                    {
                                        
                        $a++;
                                        
                        $qc $txt[1]."[anchor ".$txt[2]." name=".$txt[3].">".$txt[4];
                                    } 
                        Und so funktioniert das dann auch... versteh aber nicht warum das vorher probleme gemacht hat
                        Und was das (\S+) bedeutet weiß ich auch nicht... + bedeutet ja das 1 oder mehrere S folgen dürfen??? aber wofür soll das gut sein?

                        Und nochmal danke für eure ganze hielfe ohne euch wär ich wohl nie so weit gekommen

                        Gruß Frank

                        Kommentar


                        • #13
                          Juhuu mitlerweile weiß ich auch wo der fehler war...
                          mein zweites (.*?) hat einfach gesucht bis er ein href gefunden hatte auch wenn das in nem link viel zu weit war... jetzt hab ich ihm mit
                          ([^>|.]*?) gesagt das er zeichen suchen darf aber es darf kein > kommen was ja den link beenden würde...

                          Jetzt gehts auch freu

                          Kommentar


                          • #14
                            \S -> "any character that is not a whitespace character" findet also alles was kein whitespace (leerzeichen) ist

                            Kommentar

                            Lädt...
                            X