speedy: Sammlung mit regulären Ausdrücken

Hallo Forum,

kennt jemand eine Seite mit nuetzlichen regulaeren Ausdruecken? Ich suche z.B. einen Ausdruck, der ein <a>-Tag sowohl mit, als auch ohne href-Attribut erkennt und den Inhalt des Attributs zurueckliefert. Das ist aber nicht alles, weshalb ich nach einer Sammlung solcher Ausdruecke suche.

Viele Gruesse
  speedy

  1. Hi,

    kennt jemand eine Seite mit nuetzlichen regulaeren Ausdruecken? Ich suche z.B. einen Ausdruck, der ein <a>-Tag sowohl mit, als auch ohne href-Attribut erkennt und den Inhalt des Attributs zurueckliefert.

    das machst Du besser mit dem Modul HTML::Parser.

    Das ist aber nicht alles, weshalb ich nach einer Sammlung solcher Ausdruecke suche.

    Nenn mal ein paar Dinge.

    Cheatah

    1. Hi,

      das machst Du besser mit dem Modul HTML::Parser.

      Hm, hast Recht. Das könnte auch gehn. Ich hab grad mal die manpage dazu angeschaut.

      Nenn mal ein paar Dinge.

      Vor allem, weil ich von Beispielen am besten lerne. Man kann ja gar nicht alle Einsatzmöglichkeiten abschätzen. Und dann wären da noch die Standardanwendungen wie URLs überprüfen, Email-Adressen checken etc.

      CU
      speedy

      1. Hallo speedy,

        Vor allem, weil ich von Beispielen am besten lerne. Man kann ja gar nicht alle Einsatzmöglichkeiten abschätzen. Und dann wären da noch die Standardanwendungen wie URLs überprüfen, Email-Adressen checken etc.

        Hast Du schon mal die Dateien in den Perl-lib Verzeichnissen durchgesehen?

        ein
           grep '=~' *

        in einem meiner Lib-Verzeichnisse bringt über 500 Beispiel zu Tage und das ist bei weitem nicht alles :-).

        "the best Documentation ist the code itself" ;-)

        Grüße
           Klaus

        1. Hi,

          ein
             grep '=~' *

          in einem meiner Lib-Verzeichnisse bringt über 500 Beispiel zu Tage und das ist bei weitem nicht alles

          Schon richtig, aber erstens sind die so erhaltenen Beispiele nicht dokumentiert und zweitens ist der grep-Befehl auf Windows-Rechnern nur umstaendlich zu handhaben...

          Danke und viele Gruesse
            speedy

      2. Hi,

        Nenn mal ein paar Dinge.

        Vor allem, weil ich von Beispielen am besten lerne.

        ah, okay :-)

        Und dann wären da noch die Standardanwendungen wie URLs überprüfen, Email-Adressen checken etc.

        ...die schon in perldoc perlfaq abgedeckt werden. Übrigens hat die RegExp, um RFC-konforme URIs zu prüfen, satte 8 Kilobyte... und ist mit zwei oder drei kleinen Änderungen sogar brauchbar :-) (s. z.B. http://x55.deja.com/[ST_rn=ps/getdoc.xp?AN=595332838&CONTEXT=966937940.1517617208&hitnum=0])

        Cheatah

        1. Hi,

          ...die schon in perldoc perlfaq abgedeckt werden. Uebrigens hat die RegExp, um RFC-konforme URIs zu pruefen, satte 8 Kilobyte... und ist mit zwei oder drei

          hmm, das scheint mir dann doch ein wenig zu komplex zu sein. Aber ich hab ja jetzt einige Anregungen und such mir einfach die beste Moeglichkeit aus :)

          Viele Gruesse
          speedy

    2. Hi,

      kennt jemand eine Seite mit nuetzlichen regulaeren Ausdruecken? Ich suche z.B. einen Ausdruck, der ein <a>-Tag sowohl mit, als auch ohne href-Attribut erkennt und den Inhalt des Attributs zurueckliefert.

      Ungetestet:

      if ($string =~ /<a\s*([^>]+)\s*href\s*=\s*(?:["']?)([^<>"']*)([^>\s"']+)/i) {
        $url = $3;
      }

      das machst Du besser mit dem Modul HTML::Parser.

      Aber nur, wenn du nur wenige Sachen damit machst ODER
      genug RAM hast...
      HTML::Parser ist _etwas_ Speicherunfreundlich .)

      Das ist aber nicht alles, weshalb ich nach einer Sammlung solcher Ausdruecke suche.

      Schonmal in einen guetn Perlbuch geschaut? Dazu sind eigentlich immer
      Beispiele da. Wenn nicht => Perlbuch wegwerfen und nie
      mehr ein buch von dem Verlag kaufen.

      Ansonsten:
      http://www.rrze.uni-erlangen.de/webadm/perl/pod/perlre.html

      Ciao,
        Wolfgang

      1. Hi,

        if ($string =~ /<a\s*([^>]+)\s*href\s*=\s*(?:["']?)([^<>"']*)([^>\s"']+)/i) {
          $url = $3;
        }

        Danke, ich werds mal testen.

        » HTML::Parser ist _etwas_ Speicherunfreundlich .)

        Hm, das wusste _ich_ natuerlich nicht!

        Schonmal in einen guetn Perlbuch geschaut? Dazu sind eigentlich immer
        Beispiele da. Wenn nicht => Perlbuch wegwerfen und

        Ich hab "Programmieren mit PERL" von OReilly und "Einsteigerseminar PERL" von BHV. Sind beides gute Buecher im Sinne Deines Postings :-) Aber ich suche eine Sammlung mit vieeelen RegExps, die in der Praxis eingesetzt werden (z.B. bei CGI-Programmierung).

        Ansonsten:
        http://www.rrze.uni-erlangen.de/webadm/perl/pod/perlre.html

        Danke, aber durch englische manpages wuehl ich mich nur in allerletzter Not <g>.

        Viele Gruesse
        speedy

        1. Hallo Speedy

          Danke, aber durch englische manpages wuehl ich mich nur in allerletzter Not <g>.

          Dann versuch mal in Hardcopy (ist eh bequemer beim Arbeiten)
          "Reguläre Ausdrücke" Jeffrey E.F. Friedl Dt.Ausgabe (O'Reilly ISBN 3-930673-62-2 DM59/ATS431)

          Bissel was muß man halt auch investieren :-)

          Grüße Eckard.

          1. Hi,

            Bissel was muß man halt auch investieren :-)

            mach ich doch gern, wenn‚s sich lohnt. Behandelt das Buch regulaere Ausdruecke im allgemeinen oder enthaelt es auch spezifische Beispiele (z.B. zum parsen von HTML-Seiten etc.)?

            CU
            speedy

            1. hi ho

              mach ich doch gern, wenn‚s sich lohnt. Behandelt das Buch regulaere Ausdruecke im allgemeinen oder enthaelt es auch spezifische Beispiele (z.B. zum parsen von HTML-Seiten etc.)?

              beides.

              das buch ist einfach nur gut - finde ich :-)

              cua

              n.d.p.

      2. Hi,

        if ($string =~ /<a\s*([^>]+)\s*href\s*=\s*(?:["']?)([^<>"']*)([^>\s"']+)/i) {
          $url = $3;
        }

        das Problem bei solchen RegExp ist, daß Du _immer_ auf irgendwelche Fälle triffst, in denen sie versagen. Beispiele:

        <ahref="...">
        <a href="<link>">
        <a href="ein'link">

        Und um auch etwas realistischeres dabeizuhaben:

        <a href="<javascript:window.open('about:blank');>">
        <a href="<http://www.deja.com/msgid.xp?ST=QS&AH=1&MID=60631d2140fd692c242c65d432214098@fitug.de>">

        das machst Du besser mit dem Modul HTML::Parser.

        HTML::Parser ist _etwas_ Speicherunfreundlich .)

        Hab ich noch nicht daraufhin geprüft, mag also sein. Ich bin jedoch sicher, daß man dieses Verhalten mit geeigneter Programmierung optimieren kann.

        Cheatah

        1. Hi nochmal,

          if ($string =~ /<a\s*([^>]+)\s*href\s*=\s*(?:["']?)([^<>"']*)([^>\s"']+)/i) {

          <ahref="...">

          ich sehe gerade, daß dies nicht zutrifft, dafür aber z.B. auch <applet href="..."> oder auch <aschref="..."> (was immer das für ein Tag sein sollte).

          Problematisch ist übrigens auch

          <a title="<ein Link>" href="...">

          und ganz schlimm ist

          <a title="Dies ist ein a-Tag ohne 'href='" name="nix">

          Cheatah

          1. Hi,

            if ($string =~ /<a\s*([^>]+)\s*href\s*=\s*(?:["']?)([^<>"']*)([^>\s"']+)/i) {

            <ahref="...">

            ich sehe gerade, daß dies nicht zutrifft, dafür aber z.B. auch <applet href="..."> oder auch <aschref="..."> (was immer das für ein Tag sein sollte).

            Problematisch ist übrigens auch

            <a title="<ein Link>" href="...">

            und ganz schlimm ist

            <a title="Dies ist ein a-Tag ohne 'href='" name="nix">

            *****HAEhmmmpfffft* <- hole Luft fuer eine ganz ganz ganz lange Rede

            ***pfffffft* <- atme wieder aus, nachdem vor dem Fenster der
            Mensakoch (t.M.h.g.o.C.) vorbeigeht

            Lange Rede, kurzer Sinn:

            Du hast Recht.
            Ausnahmen gibt es immer und niemand wird die eierlegende Wollmilchsau erfinden die
            auch allen gerecht wird. Selbst HTML::Parse[r] hilft nicht immer.

            Aber wie bei Physik: Man kann sich an die Wahrheit rantasten, treffen wird man sie selten.

            Ciao,
              Wolfgang

            1. Hi,

              Ausnahmen gibt es immer und niemand wird die eierlegende Wollmilchsau erfinden die
              auch allen gerecht wird. Selbst HTML::Parse[r] hilft nicht immer.

              Aber es ist oft ganz hilfreich, wenn man von den Ausnahmen ausgeht, um eventuelle Fehlfunktionen kalkulieren bzw. in seinen Dokumentationen auf Funktionalitaetsgrenzen hinweisen zu koennen. Es reicht ja, wenn man diese Moeglichkeiten kennt. Schlimm ist, wenn man allzu naiv drauflosprogrammiert und dann immer wieder mit Fehlfunktionen "bestraft" wird.

              Viele Gruesse
              speedy