Localhorst: Ein regulärer Ausdruck will mal wieder nicht

Guten Morgen Forum,

bevor es ins schöne Sommer Wochenende geht hab ich noch eine kleine Frage zu den guten alten regulären Ausdrücken.

Ich möchte aus einem Link der sich in einem String befindet jeweils den Link Text herraus filtern.
(In Beispiel 1 also =>Eukaryota, in Bsp. 2 =>Bacteria)

Es soll aber nur aus den Links die Beschreibung gefiltert werden, bei denen das Alt Attribut ALT="superkingdom" vorkommt.

Das sollte ja nicht so schwer sein, aber es will mir nicht gelingen, ich bekomme durchaus einen Ausdruck hin der mir bei einem der Beispiele den gewünschten Text liefert, aber hab noch keinen hinbekommen der mir etwas bei beiden liefert.

Hier mal mein Ansatz:

$such_string=~m/<A.*ALT="superkingdom".*>([^<]*)</A>/gi;

(Erklärung was ich denke was ich Abfrage mit dem RegExp:
Einen A Tag, gefolgt von beliebigen und beliebig vielen(oder kein) Zeichen dann ein ALT="superkingdom" danach noch mal beliebige Zeichen oder keins bis zum > dann werden alle Zeichen außer das < geklammert und somit gespeichert und dann muß noch mal ein </a> kommen, die ganze Sache ist case insensitive wegen des Flags i)

Beispiel 1: $such_string="...<A HREF="url.de" ALT="superkingdom">Eukaryota</A>..."

oder

Beispiel 2: $such_string="...<a ALT="superkingdom" href="anderer_url.de" TITLE="superkingdom">Bacteria</a>..."

(Die Punkte sollen nur zeigen das die besagte Stelle in einem langen String vorkommen, sind so nicht im String vorhanden ;o)   )

Ich hoffe einer von euhc kann mir dabei helfen, dann kann ich mich auch mental vom Computer lösen und werde ein schönes Wochenende genießen.

Gruß
Localhorst

  1. Hi,

    Ich möchte aus einem Link der sich in einem String befindet jeweils den Link Text herraus filtern.
    (In Beispiel 1 also =>Eukaryota, in Bsp. 2 =>Bacteria)

    Schau dir mal das Modul HTML::Parser an, damit müsste es einfacher gehen als mit Regexps.
    http://search.cpan.org/dist/HTML-Parser/

    HTH

    Margin-Auto

    1. Hi,

      also ich persönlich finde da regexps schon eleganter, da für eine Aufgabe ein Modul (für mich) overkill ist.

        
      #!/usr/bin/perl  
      use strict;  
      use warnings;  
        
        my $s='...<A HREF="url.de" ALT="superkingdom">Eukaryota</A>...<a ALT="superkingdom" href="anderer_url.de" TITLE="superkingdom">Bacteria</a>';  
        
        foreach ($s=~/<a.*?[^>]>(.*?)<\/a>/gi){  
          print $_;  
        }  
      
      

      gruss

      --
      no strict;
      no warnings;
      Ich weiss es nicht, aber ich bin mir nicht sicher.
      Gold kann man essen, es muss nur flüssig genug sein.
      1. #!/usr/bin/perl
        use strict;
        use warnings;

        my $s='...<A HREF="url.de" ALT="superkingdom">Eukaryota</A>...<a ALT="superkingdom" href="anderer_url.de" TITLE="superkingdom">Bacteria</a>';

        foreach ($s=~/<a.?[^>]>(.?)</a>/gi){
            print $_;
          }

          
        und was passiert, wenn im alt oder title Attribut ein < vorkommt?  
          
        Struppi.
        
        -- 
        [Javascript ist toll](http://javascript.jstruebig.de/)
        
        1. Hi,

          und was passiert, wenn im alt oder title Attribut ein < vorkommt?

          Dann ist das HTML noch ungültiger als mit dem alt-Attribut im a-Element ;-)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        2. Hi,

          und was passiert, wenn im alt oder title Attribut ein < vorkommt?

          seihe https://forum.selfhtml.org/?t=109795&m=687424,
          und gar nichts, schlimmer wäre ein >.

          gruss

          --
          no strict;
          no warnings;
          Ich weiss es nicht, aber ich bin mir nicht sicher.
          Gold kann man essen, es muss nur flüssig genug sein.
  2. Hi,

    Es soll aber nur aus den Links die Beschreibung gefiltert werden, bei denen das Alt Attribut ALT="superkingdom" vorkommt.

    Dir ist klar, daß a-Elemente in HTML gar kein alt-Attribut haben?

    Das sollte ja nicht so schwer sein, aber es will mir nicht gelingen, ich bekomme durchaus einen Ausdruck hin der mir bei einem der Beispiele den gewünschten Text liefert, aber hab noch keinen hinbekommen der mir etwas bei beiden liefert.

    Hier mal mein Ansatz:

    $such_string=~m/<A.*ALT="superkingdom".*>([^<]*)</A>/gi;

    Das matcht auch
    <a>bla</a><img alt="superkingdom" src="bild.png"><a>blablubb</a>

    Das erste .* paßt auf '>bla</a><img ', das zweite auf ' src="bild.png"><a'

    HTML allein mit Regex zu parsen ist nicht möglich.

    (Erklärung was ich denke was ich Abfrage mit dem RegExp:
    Einen A Tag, gefolgt von beliebigen und beliebig vielen(oder kein) Zeichen

    insbesondere auch weitere Elemente

    dann ein ALT="superkingdom" danach noch mal beliebige Zeichen oder keins bis zum >

    bis zu einem beliebigen weiteren > - da können zwischendurch noch zig > stehen

    dann werden alle Zeichen außer das < geklammert und somit gespeichert und dann muß noch mal ein </a> kommen, die ganze Sache ist case insensitive wegen des Flags i)

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.