Bogus: Variable durchsuchen - Wie? // Teil 2

Hye,

danke frank, jörk und cheatah für die antworten bis jetzt. speziell cheatah: der code funktioniert, nur mit dem manko dass das ergebnis zb. so aussieht:
Die Email Adresse lautet: webmaster@ford-network.at">webmaster@ford-network.at

hab ich soweit ingekriegt das er nur mehr die erste webmaster... nimmt. nur, ich habe die regexp einfach so erweitert das sie bei " aufhört. was aber wenn jemand ein ' benützt hat? geht das nur im if...elsif oder auch in einem befehl?

und: was ist wenn in der variablen 2 mail adressen vorkommen? mit meinen änderungen nimmt er nur die erste.
kann man da auch was machen?

sorry, aber ich hab von regexp überhaupt keinen plant.
werd mir jetzt echt das cookbook bestellen.
weiss jemand wo ich das bestellen kann??? soweit ich weiss ist es von o'reily oder so? tips?

danke nochmal und im vorhinein
cu
BOGUS

  1. hi!

    sorry, aber ich hab von regexp überhaupt keinen plant.
    werd mir jetzt echt das cookbook bestellen.
    weiss jemand wo ich das bestellen kann??? soweit ich weiss ist es von o'reily oder so? tips?

    Hier sind ein paar Perl-Bücher, die ich empfehlen kann :-)

    Programmieren mit Perl
    http://www.amazon.de/exec/obidos/ASIN/3930673487/top04/028-5619995-2204060
    Das Kamel-Buch, sollte jeder besitzen, der sich mit Perl wirklich beschäftigt. Referenz.

    Perl Cookbook
    http://www.amazon.de/exec/obidos/ASIN/1565922433/top04/028-5619995-2204060
    Viele konkrete Anwendungsbeispiele, die man wirklich gebrauchen kann.

    Perl Kochbuch
    http://www.amazon.de/exec/obidos/ASIN/3897211408/top04/028-5619995-2204060
    Die deutsche Übersetzung, leider noch nicht erschienen.

    Programmieren mit Perl-Modulen
    http://www.amazon.de/exec/obidos/ASIN/3897211084/top04/028-5619995-2204060
    Behandelt alles, was man zu Modulen wissen muss. Außerdem viele Anleitungen und Manpage-Übersetzungen zu wichtigen Modulen.

    Perl 5 - kurz & gut
    http://www.amazon.de/exec/obidos/ASIN/3897212013/top04/028-5619995-2204060
    Die Kurzreferenz. Wenn man sich schon mit Perl auskennt und schnell was sucht.

    Einführung in Perl
    http://www.amazon.de/exec/obidos/ASIN/389721105X/top04/028-5619995-2204060
    Das Lama-Buch. Einführung in Perl für Anfänger.

    Einführung in Perl für Win32-Systeme
    http://www.amazon.de/exec/obidos/ASIN/3897211068/top04/028-5619995-2204060
    Ebenfalls eine Einführung, wobei besonders auf die Programmierung unter Windows eingegangen wird.

    Reguläre Ausdrücke
    http://www.amazon.de/exec/obidos/ASIN/3930673622/top04/028-5619995-2204060
    Was man halt so über Reguläre Ausdrücke wissen muss.

    Alle Bücher sind von O'Reilly. Die haben nunmal die besten Perl-Bücher :-)

    bye, Frank!

  2. Hi,

    danke frank, jörk und cheatah für die antworten bis jetzt. speziell cheatah: der code funktioniert, nur mit dem manko dass das ergebnis zb. so aussieht:
    Die Email Adresse lautet: webmaster@ford-network.at">webmaster@ford-network.at

    hab ich soweit ingekriegt das er nur mehr die erste webmaster... nimmt. nur, ich habe die regexp einfach so erweitert das sie bei " aufhört. was aber wenn jemand ein ' benützt hat? geht das nur im if...elsif oder auch in einem befehl?

    if ($variable =~ /mailto:([^\s"'>]+)/) { print "eMail-Adresse: $1\n"; }

    Ich habe die eckige Klammer einfach um ein paar verbotene Zeichen erweitert. Alternativ kannst Du sie auch ersetzen durch:

    [\w.@-]

    womit \w (entspricht "a-zA-Z0-9_"), der Punkt, "@" und "-" erlaubt sind. Beim ersten nicht erlaubten Zeichen bricht er dann ab.

    und: was ist wenn in der variablen 2 mail adressen vorkommen? mit meinen änderungen nimmt er nur die erste.
    kann man da auch was machen?

    Ersetze "if" durch "while" - allerdings wird es bei HTML-Tags der von Dir genannten Art zu Verdopplungen führen. Dies kannst Du folgendermaßen umgehen:

    while ($variable =~ /.../) { $hash{$1}++; } # "..." durch die RegExp Deiner Wahl ersetzen!
    foreach (keys %hash) { print "$_ wurde $hash{$_} mal gefunden.\n"; }

    Cheatah

    1. Hye,

      ich verwende zum einlesen des source von einem anderen server den befehl 'get' und 'LWP::Simple'. Eben so wie damals geantwortet wurde auf diese frage.

      Es funktioniert soweit auch. solange ich eingebe
      $doc = get 'http://ne.url';
      print $doc

      das problem - wenn ich anstelle einer url eine variable einsetzte und diese variable sich ändert. zb. innerhalb einer foreach schleife, dann werden die seiten nicht eingelesen? geht das mit 'get' nicht? mache ich was flasch`? muss ich was wissen? gits da nen anderen befehl?

      thnx
      cu
      BOGUS

      1. Hi,

        ich verwende zum einlesen des source von einem anderen server den befehl 'get' und 'LWP::Simple'. Eben so wie damals geantwortet wurde auf diese frage.

        Es funktioniert soweit auch. solange ich eingebe
        $doc = get 'http://ne.url';
        print $doc

        das problem - wenn ich anstelle einer url eine variable einsetzte und diese variable sich ändert. zb. innerhalb einer foreach schleife, dann werden die seiten nicht eingelesen? geht das mit 'get' nicht? mache ich was flasch`? muss ich was wissen? gits da nen anderen befehl?

        sorry, ich bin mit LWP eigentlich inhaltlich überhaupt nicht vertraut :-(

        Wenn Du allerdings die Variable in Singlequotes angibst, ist es schon ein Wunder, daß es beim ersten Mal funktioniert. Ansonsten könnte es sein, daß Du mit "new LWP" oder so ein neues Objekt erzeugen mußt (mitgelieferte Doku beachten!), oder versuche es mit "undef $doc;" um die Variable zu vernichten. Wie lautet denn die foreach-Schleife?

        Cheatah

        1. hi!

          Wenn Du allerdings die Variable in Singlequotes angibst, ist es schon ein Wunder, daß es
          beim ersten Mal funktioniert.

          Das musst du mir erklären. Warum sollte das so sein?

          bye, Frank!

          1. hi!

            Wenn Du allerdings die Variable in Singlequotes angibst, ist es schon ein Wunder, daß
            es beim ersten Mal funktioniert.
            Das musst du mir erklären. Warum sollte das so sein?

            Sorry, man sollte alles richtig lesen, bevor man antwortet ;))

            bye, Frank!

        2. hye cheatah

          sorry, ich bin mit LWP eigentlich inhaltlich überhaupt nicht vertraut :-(

          man(n) kann ja nicht alles wissen :-)

          Wenn Du allerdings die Variable in Singlequotes angibst, ist es schon ein Wunder, daß es beim ersten Mal funktioniert. Ansonsten könnte es sein, daß Du mit "new LWP" oder so ein neues Objekt erzeugen mußt (mitgelieferte Doku beachten!),

          der befehl innerhalb singlequotes wurde mir so gezeigt bzw. war das eben die antwort auf meine damalige frage.
          doku zu diesem LWP hab ich nicht, ist anscheinend gängig, da ich es nicht installieren musste.

          oder versuche es mit "undef $doc;" um die Variable zu vernichten. Wie lautet denn die foreach-Schleife?

          den inhalt von $doc zu vernichten ist ne idee, versuche ich gleich mal. foreach schleife sah (hab ich gelöscht) so aus:

          foreach $url (@urls) {
          $doc = get '$url';
          print "content....
          print "$doc";
          }

          ganz normal eben.
          mein verdacht: perl ist im verarbeiten zu schnell. folglich spricht er alle adressen nur ganz kurz an und geht gleich weiter - ergebniss ist dann natürlich null...:-(

          naja, ich werd mal versuchen ne doku zu finden,
          thnx and cu
          BOGUS

          1. Hallo Bogus!

            foreach $url (@urls) {
            $doc = get '$url';
            print "content....
            print "$doc";
            }

            Also was Du in Single-Quotes schreibst, wird von Perl nicht weiter interpretiert, sondern unveraendert uebernommen. Das heisst, mit
            $doc = get '$url';   hast Du genau das erreicht, was passiert, wenn Du im Browser in der Adresszeile $url eingibst. Mit
            $doc = get $url;   sollte es dagegen funktionieren. Nur so wird das, was in $url drin steht, an get uebergeben.

            mein verdacht: perl ist im verarbeiten zu schnell. folglich spricht er alle adressen nur ganz kurz an und geht gleich weiter - ergebniss ist dann natürlich null...:-(

            Ganz schoen abenteuerliche Theorie. *g*

            Calocybe

            1. hye Calocybe,

              möglich das dein tip auch funktioniert. wenn ich $url in double(?)quotes angebe funktioniert es :-)
              also
              $doc = get "$url";

              danke
              cu
              BOGUS

              1. Hallo Bogus!

                möglich das dein tip auch funktioniert. wenn ich $url in double(?)quotes angebe funktioniert es :-)

                Ach ja, der Vollstaendigkeit halber: Was in Doubleqoutes steht, wird interpretiert, das in Singlequotes nicht. Hab ich uebrigens vor ein paar Monaten auch hier im Forum gelernt.

                also
                    print "<A HREF="$url">$url</A>";
                sollte einen vernuenftigen Link ausgeben.
                    print '<A HREF="$url">$url</A>';
                dagegen gibt das, was da steht, unveraendert raus.

                also
                $doc = get "$url";

                Eben. :-)

                Calocybe