Hallo Juergen, * Juergen Christoffel schrieb [25-05-06 11:07]: > On Wed, May 24, 2006 at 10:28:34AM +0200, Udo Mueller wrote: > > Bitte ändere Zeile 35 von > > > > if (m/<(.*\@.*)>/) { > > > > nach > > > > if (m/.*<(.*?\@.*?)>.*/) { > > OK, ich sehe was Du machst, aber ich weiss noch nicht, warum (s.u.). > > Mit dem initialen ".*" schiebst Du den Match ganz nach rechts, findest also > das am weitesten rechts stehende Paar "<...>". Das ".*" am Ende ist > ueberfluessig, weil es nicht geklammert ist, um etwas zu extrahieren. Ack. Ich habe die .* auf beide Seiten geschrieben, damit ich greedy auf beiden Seiten der <> bin. > Die nicht-gierige Variante *? von * nimmst Du, um zu vermeiden, dass Du bei > Strings wie "<foo><bar>" alles zwischen dem ersten "<" und dem letzten ">" > in der Klammer matchst. Besser (weil "selbst-dokumentierender") waere statt > dessen > > if (m/.*<([^>]+\@[^>]+)>/) Ack. > Bei Regexps ist es sehr oft hilfreich, genau zu sagen, was man _nicht_ will > (auch fuer den NFA bzw. DFA "unten drunter", der dann nicht so viele > Alternativen ausprobieren muss, um zu sagen "klappt nicht!"). Rexexp sind schön, aber leider nicht wirklich leicht lernbar... > > Es gibt in meinem Keyring Einträge, in denen 2 < und 2 > vorkommen. > > Dann greift deine Rexexp nicht. > > Hmmm, in meinem Keyring kommt das nicht vor. Wie sehen diese Eintraege denn > aus? Wenn Du mir das sagst, kann ich eine bessere Regexp angeben. uid Joachim Schlöffel (<unsigniert>) <JS@Netsliders.de> > Das erste Beispiel war ad hoc (d.h. ich gebe zu: habe mir nicht die Specs > fuer den Keyring angesehen ;-). Die Eintraege nach "UID ..." scheinen mir > aber das zu sein, was in Emails in der From-Zeile steht, ggf. mit runden > Klammern fuer Kommentare, auch ohne "<...>" wie ich gerade sehe, aber wohl > kaum mit zwei Paar spitzen Klammern, ... hmm, ... es sei denn, die stehen > in "(...)" im Kommentar? Genau. > Um also auch Zeilen zu parsen, die gar keine "<...>" enthalten, muss das > Pattern aufwendiger werden. Wir naehern uns dann bald dem klassischen > Problem, Adressen nach RFC-2822 zu parsen. Die Loesung dazu geht in Jeffrey > Friedls hervorragendem Buch "Mastering Regular Expressions" ueber eine > komplette Buchseite ;-0 Sollte ich mir auch mal besorgen. > Wir koennen also zumindest schreiben: > > m/<?([^>\s]+\@[^>\s]+\.[^>\s]+)>?/ > > Damit matchen wir Email-artige Zeichenketten, vorzugsweise innerhalb der > spitzen Klammern, aber auch ohne diese. Auf jeden Fall aber nicht mehr > ueber zwei Klammerpaare hinweg. Klappt hier. Danke! Mit freundlichen Grüßen Udo Müller -- ComputerService Udo Müller Tel.: 0441-36167578 Schöllkrautweg 16 Fax.: 0441-36167579 26131 Oldenburg info@cs-ol.de Mobil: 0162-4365411
Attachment:
signature.asc
Description: Digital signature