reguläre Ausdrücke und Links

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

  • reguläre Ausdrücke und Links

    Hallo Zusammen,

    habe ein Problem mit regulären Ausdrücken.

    Wenn ich folgenden preg_match durchführe, bekomme ich nur den zwetern Teil der regexp raus.
    Ich möchte aber zuerst den link raus filtern, dann denn dazugehörigen Titel, der nach dem >title</a kommt.

    Was fehlt mir?

    Ich brauche auf einer bookmark.html seite:

    PHP-Code:
    <DL><p>
                <
    DT><H3 ADD_DATE="1206958129" LAST_MODIFIED="1207589350" ID="rdf:#$Bm.0T3">robby williams</H3>
                <
    DL><p>
                    <
    DT><A HREF="http://youtube.com/watch?v=jEEivzKgZh0" ADD_DATE="1179418344" LAST_VISIT="1207589303" LAST_MODIFIED="1179418361" ICON="data:image/x-icon;
    base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAD
    //////////4OD//9paf//bm7//2Fh//9ZWf//Wlr//1pa//9WVv//ZGT//3Bw//9jY///goL//////////////////
    11d//8sLP//QUH//ygo//84OP//RET//y4u//8xMf//UVH//y4u//8PD///ZWX//x0d//9aWv////////////
    88PP//Cgr///////8zM///1NT///////+lpf//ubn///////+urv//fHz////////g4P//Fhb/////////////MzP//
    woK////////NDT//8vL//9ycv//paX
    //7Cw//9jY///s7P//8nJ//9XV///eXn//yIi/////////////zMz//8LC///+/v//zMz///Gxv//hYX//6Ki//+srP//
    W1v//6ys//+3t///2tr//93d//8PD/////////////80NP//AgL///b2//8nJ///5ub//56e//+5uf//oaH//+/v//+5uf//oKD//+Li///f3///AgL
    /////////////MzP//wUF////////Skr//0pK//9NTf//NTX//97e//+ysv//Nzf//xIS//+mpv//Kyv//z09/////////////xkZ///Y2P////////////
    8nJ///EBD//wAA///y8v//Ly///wAA//8mJv//Hh7//6mp//92dv////////////+vr///Jib//xMS//8eIP//MzP
    //zY2//84OP//Hh///y4u//9XV///hoj//8LC///R0f//qqr/////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////AAAA/8zMzP/u7u7/IiIi/wAAAP8iIiL//////zMzM/8AAAD/AAAA
    /////////////////////////////////wAAAP/MzMz//////yIiIv/u7u7/ERER/7u7u/8AAAD/iIiI/xEREf///////////////////////////
    +7u7v8AAAD/zMzM//////8iIiL/7u7u/xEREf+7u7v/AAAA/8zMzP8RERH///////////////////////////
    93d3f/AAAA/1VVVf/u7u7/IiIi/wAAAP8iIiL//////wAAAP/MzMz/ERER///////////////////////
    d3d3/AAAA/4iIiP8AAAD/3d3d/////////////////////////////////////////////////////////////////wAAAP//////AAAA
    ////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" 
    LAST_CHARSET="UTF-8" ID="rdf:#$92tFv">
    YouTube  Robbie 
    Williams 
    Misunderstood (Live TOTP)</A>
                </
    DL><p
    !!Als Beispiel!!!!

    http://youtube.com/watch?v=jEEivzKgZh0

    und

    YouTube - Robbie Williams - Misunderstood (Live @ TOTP)


    Hier der PHP Code:

    PHP-Code:
    <?

    $lines = file ('bookmarks.html');
    #print_r($lines);
    // Durchgehen des Arrays und Anzeigen des HTML Source inkl. Zeilennummern
    foreach ($lines as $line) {
        preg_match("#(<A(?:.*)?HREF=\"(.*)\"(?:.*)?ADD_DATE)?(\s-.+</a>)#isu",$line,$match);
        
        echo "<pre>";
        print_r($match);
    }

    ?>
    Danke schonmal vorab für eure Tips.
    gruss pedro

  • #2
    Auf die Schnelle gebe ich dir mal einen Tipp, der in eine andere Richtung geht: Performance.
    Beschäftige dich mal etwas eingehender mit dem Punkt (.) und was er bewirkt. Drei .* bzw. .+ in einem einzigen Ausdruck... Das mag gut gehen, solange die Engine auch findet, wonach sie sucht. Sobald aber keine Übereinstimmungen gefunden werden, geht dein Ausdruck in die Knie und sucht in puncto mangelhafter Performance seinesgleichen.

    Eine weit bessere Lösung wäre die Benutzung von negierten Charakterklassen. Als Beispiel:
    Code:
    /<a\shref\s*=\s*"([^"]+)"\s*>.../
    Grüße
    Zuletzt geändert von Griecherus; 03.05.2008, 22:44.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      ja man bastelt so rum, guggt hier und da im netz. und so schustert man sich eine regexp zusammen und is froh das es irgendwie geht... das passiert dann bei magelnden verständnis für die sache... nur wenn es sooo einfach wäre, hätte ich es schon
      danke für den tip. ich werde es beachten ;o)
      gruss pedro

      Kommentar


      • #4
        erledigt
        Zuletzt geändert von petro_0; 03.05.2008, 23:16.
        gruss pedro

        Kommentar


        • #5
          Moin!

          Ich suche nach einer Möglichkeit, in einem Text vorkommende Urls (in der Form [a href="http://www.blablablub.de/index.php?id=123]blub[/a]") derart zu verändern, daß die Adresse durch "http://blah.de/blub.php" ersetzt und die Id-Nummer um 10000 erhöht wird.

          Nach langem Ausprobieren stelle ich fest, daß ich offenbar kein Händchen dafür habe. Könnte mir da jemand behilflich sein? Dank im voraus!

          Gruß
          Wodan

          Kommentar


          • #6
            Zeig doch mal, was du alles ausprobiert hast. Möglicherweise bist du ja einer Lösung sehr nahe, so dass wir dich nur noch in die richtige Richtung schubsen müssen, statt dir eine fertige Lösung abzuliefern.

            @Petro_0: Poste doch bitte deine Lösung, damit auch andere Leute, die bei ihrer Suche auf dieses Thema stoßen, Nutzen davon haben.

            Grüße
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              PHP-Code:
              $suchmuster=',<a([^>]+)href="(?!https?://|[url]ftp://[/url]|mailto:
              |news:)([^>"\s]+)",i'
              ;
              $ersetzen='<a\1href="http://blah.de/blub.php?id="';
              echo 
              preg_replace($suchmuster$ersetzen,
              '<a href="http://www.blablablub.de/index.php?id=123" target="_blank">blub</a>'); 
              Das ist alles, was ich habe. Das ist ein Beispiel, das ich irgendwo in den Weiten des Netzes gefunden habe und das meinem Bedürfnis einigermaßen nahekommt. Der Austausch der Adresse funktioniert, nur an der id beiß ich mir die Zähne aus. Ich finde auch nichts, wo das für Ahnungslose gut erklärt wird.

              Nachtrag: Die erste Zeile hat mir das Forum verstümmelt.
              Zuletzt geändert von Wodan; 05.05.2008, 17:15.

              Kommentar


              • #8
                Ein klarer Fall für einen RegExp mit Callback-Funktion z.B.
                PHP-Code:
                function increment($var){
                  
                $ret $var[2] + 1000;
                  return 
                '<a '.trim($var[1]).' href="http://blah.de/blub.php?id='.trim($ret).'" '.trim($var[3]).'>';
                }
                $reg '/<a(.*)href="[^?]*\?.*id=(\d*?)"([^>]*)>/U';
                echo 
                preg_replace_callback('/<a(.*)href="[^?]*\?.*id=(\d*?)"([^>]*)>/U',"increment",$str); 
                Habe das bei mir mal Online gestellt

                Gruss

                tobi

                p.s. bitte noch den Code etwas umbrechen!
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Das funktioniert ja wunderprächtig. Vorzüglichsten Dank!

                  Gruß
                  Wodan

                  Kommentar


                  • #10
                    hier die lösung

                    ja klar mache ich doch.

                    so habe ich es nun gelöst:

                    PHP-Code:
                    preg_match("#(<A\sHREF\s*=\s*\"([^\"]+)\"\s*ADD_DATE).*\">(.+)</a>#isu",$line,$match); 

                    gruss
                    gruss pedro

                    Kommentar

                    Lädt...
                    X