Strings - Mustererkennung

Wie finde ich eine URL in einem Textabschnitt?

(Autor: Ishka & perl-community)

Ich habe einen String, und möchte ein komplexes Muster herausfinden (z.B. ob eine URL auf eine Seite aus Deutschland in dem String vorkommt):


        $string1='hddp://das.ist.keine.ulr/aus/Deutschland';
        $string2='http://www.aus-deutschland.de';
        if ($string1=~/http:\/\/[a-zA-Z_\-\.]+\.de/)
         {
         print 'string 1 ist URL aus Deutschland'
         }#Wird nicht angezeigt
        if ($string2=~/http:\/\/[a-zA-Z_\-\.]+\.de/)
         {
         print 'string 2 ist URL aus Deutschland'
         }#Wird angezeigt

Erklärung:
Was macht also der kryptisch anmutende Ausdruck /http:\/\/[a-zA-Z_\-\.]+\.de/ ?
In der Einführung in die Mustererkennung haben wir kennengelernt, wie Mustererkennung grundsätzlich funktioniert. Allerdings können zwischen // nicht nur Zeichen stehen, die erkannt werden, sondern auch Steuerzeichen.

/http:\/\/[a-zA-Z_\-\.]+\.de/

Falls man ein solches Steuerzeichen trotzdem als Zeichen erkennen möchte, einfach ein \ davor setzen und es wird als normales Zeichen erkannt (/ alleine hätte den Ausdruck zu früh geschlossen).

/http:\/\/[a-zA-Z0-9_\-\.]+\.de/ Die eckigen Klammern [ ] bedeuten: Eins der Zeichen im inneren. [abcde] hieße zum Beispiel: Ein a, ein b, ein c, ein d oder ein e. Abkürzend kann man auch Schreiben: [a-e]. [aA0] würde bedeuten: ein kleines a, ein großes A, oder 0. diese beiden Schreibweisen kann man auch beliebig kombinieren: [a-pruA-C0-9] würde also heißen: ein Buchstabe zwischen a und p, oder ein r oder ein u, oder ein A, B oder C oder irgendeine Zahl. Steuerzeichen müssen auch hier mit \ gekennzeichnet werden, wenn sie als Zeichen erkannt werden sollen.

/http:\/\/[a-zA-Z_\-\.]+\.de/ ?

das + als Steuerzeichen bedeutet: Ein oder mehrere Mal der letzte Buchstabe.

weitere Steuerzeichen (im Beispiel in m// eingebaut) sind:
m/./ # Ein einzelner Buchstabe. Erkennt weder \r noch \n (Zeilenumbrüche)
m/\./ # Durch das Zeichen \ wird der Steuerbefehl nicht ausgeführt, sondern das nachfolgende Zeichen als Zeichen erkannt
m/^/ # Zeilen- oder Stringanfang
m/$/ # Zeilen- oder Stringende
m/*/ # Null oder mehrere Male den letzten Buchstaben
m/+/ # Ein oder mehrere Male den letzten Buchstaben
m/?/ # Null oder ein Mal den letzten Buchstaben
m/{5,7}/ # Fünf bis sieben mal den letzten Buchstaben

Ergänzungen, Kommentare

TinaMueller - 12 Aug 2003 - URI::Find

Man kann auch das Modul URI::Find benutzen:
require URI::Find;
my $finder = URI::Find->new(\&callback);
my $anzahl = $finder->find(\$text);
sub callback { mach_was_mit($_[1]) }

Kommentare werden am besten in folgender Form vorgenommen, damit sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne <verbatim>):
---### Main.??? - 14 Jul 2003 - Betreff

UtilFaqSubForm edit

Titel Wie finde ich eine URL in einem Textabschnitt?
Autor Ishka & perl-community
Bereich FaqStrings
Topic revision: 2006-05-06, TinaMueller
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.