kleine Frage zu preg_match_all

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

  • kleine Frage zu preg_match_all

    Hallo,
    ich bin grad dabe eine Funktion zu schreiben um Links auf meinen Seiten auzuwerten.
    Soweit funktioniert das alles schon recht gut. Nur stehe ich nun vor dem PRoblme optionale attribute des a- Tags zu verarbeite.

    wie erweitere ich die funktion das sie optional attribute wie target, title, class, style, id... mitverwertet?

    Momentan zeigt sie mir munter alle Links an welche nach dem Schema <a href="http://www.domain.com">LINK</a> aufgebaut sind. Sobald ein Link das target attribut hat wird diese fröhlich übergangen.

    Wie lassen sich optionale sachen am besten einbauen?

    PHP-Code:
    function get_links($html)
            {
                
    $num preg_match_all('/\<a href="([^\"]*)\">/i',$html,$ergebniss);
                return 
    $ergebniss[1];
            } 
    Anwälte in Vulkane werfen -
    Wer anderen eine Bratwurst brät, der besitzt ein Bratwurstbratgerät!

  • #2
    Re: kleine Frage zu preg_match_all

    Original geschrieben von flyingMiATA


    Wie lassen sich optionale sachen am besten einbauen?
    Durch quantifier im muster. 0 oder einmal wäre optional.

    greets
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #3
      mmmhhh... komplexes Thema

      würde es nicht eigentlich auch ausreichen das schliessende > zu entfernen?
      Anwälte in Vulkane werfen -
      Wer anderen eine Bratwurst brät, der besitzt ein Bratwurstbratgerät!

      Kommentar


      • #4
        nein, das hängt damit zusammen das deine regex:

        /<a href="([^\"]*)\">/i
        beachtet nicht das zwischen dem geschlossenen tag und dem anführungszeichen noch etwas stehen kann.

        also ich bin kein regex profi aber so ugf. müsste es gehen:

        /<a href="([^\"]*)\"+.{0,}+>/i
        nicht getestet!

        gruß
        Robert

        PS: der hier funzt zu hundert pro

        EDIT:
        <a[\s]+[^>]*?href[\s]?=[\s\"\\']+(.*?)[\"\\']+.*?>([^<]+|.*?)?<\/a>
        Zuletzt geändert von subabrain; 09.09.2006, 18:57.

        Kommentar


        • #5
          Tu den Code mal in die Code-Tags, das Forum verschluckt da teilweise Backslashes...
          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


          • #6
            also bei der regex von flyingMiATA glaube ich wurde da was verschluckt - aber ich weiss ja bereits von dem verschlucken von backslashes - daher schreibe ich die auch doppelt - übrigens auch in den code tags

            gruß
            Robert
            Zuletzt geändert von subabrain; 09.09.2006, 21:45.

            Kommentar


            • #7
              mein regex dazu (nur kurz getestet):
              Code:
              '|<a href="(.+)"( \w+="\w+")*>[ \w]+</a>|iU'

              Kommentar


              • #8
                Original geschrieben von subabrain
                also bei der regex von flyingMiATA glaube ich wurde da was verschluckt - aber ich weiss ja bereits von dem verschlucken von backslashes - daher schreibe ich die auch doppelt - übrigens auch in den code tags

                gruß
                Robert
                Ok, na dann - war mir nicht mehr so sicher obs bei den Code tags auch so war oder nicht.

                OffTopic:
                Freue mich schon auf die Beschwerden von Usern in der neuen Version... Also wenn der Bug mal gefixt ist.... "Die ganzen RegEx funzen nicht mehr!"
                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

                Lädt...
                X