Probleme mit Durchsuchen eines Strings

18/10/2007 - 13:14 von Daniel Krabbe | Report spam
Hallo zusammen!
(Dies dürfte wohl eine der hàufigsten Anreden im Netz sein ;-) )

Ich durchsuche einen langen String nach einem bestimmten Muster, konkret:
Eine E-Mail nach ihrem Empfànger anhand der Develop-To-Headerzeile.
In einem einfachen Beispiel klappte das auch gut, die Suche lieferte die Adresse wie
gewünscht. Lasse ich den gleichen Suchstring nun aber über den kompletten Mailheader
laufen kommt es zu folgendem Problem:

Normalerweise wird nach dem Durchlauf in

- $1 der Nutzername
- $2 die Domain
- $3 die TLD

gespeichert. Bei mir aber nicht mehr, hier steht plötzlich der komplette String in $1 und
$2, $3 bleibt leer.

Die zugehörigen Codezeilen:

$mail =~ /Delivered-To:\s*<([^\@]+)\@([^\.]+)([\.\w+]+)>/;
($user,$domain,$tld) = ($1,$2,$3);
$mailaddi = $user . $klaffe . $domain . $tld;
print "user: $user, klaffe: $klaffe, domain: $domain, tld: $tld ";



#!/usr/bin/perl

use strict;
use warnings;

my $klaffe = "\@";
my $string = "Dd d rrwa rr Delivered-To: <user\@domain.tld.de>";

$string =~ /Delivered-To:\s*<([^\@]+)\@([^\.]+)([\.\w+]+)>/;

my ($user,$domain,$net) = ($1,$2,$3);

my $mailaddi = $user . $klaffe . $domain . $net;

print "$mailaddi ";


Die Zeilen als Extraprogramm liefern wie gewünscht "user@domain.tld.de".
Wo ist mein Verstàndnisfehler? Habe ich was übersehen?

Für Hilfe dankend,
Daniel
 

Lesen sie die antworten

#1 Roman Racine
18/10/2007 - 13:26 | Warnen spam
Daniel Krabbe wrote:

Hallo zusammen!
(Dies dürfte wohl eine der hàufigsten Anreden im Netz sein ;-) )

Ich durchsuche einen langen String nach einem bestimmten Muster, konkret:
Eine E-Mail nach ihrem Empfànger anhand der Develop-To-Headerzeile.
In einem einfachen Beispiel klappte das auch gut, die Suche lieferte die
Adresse wie gewünscht. Lasse ich den gleichen Suchstring nun aber über den
kompletten Mailheader laufen kommt es zu folgendem Problem:

Normalerweise wird nach dem Durchlauf in

- $1 der Nutzername
- $2 die Domain
- $3 die TLD

gespeichert. Bei mir aber nicht mehr, hier steht plötzlich der komplette
String in $1 und $2, $3 bleibt leer.

Die zugehörigen Codezeilen:

$mail =~ /Delivered-To:\s*<([^\@]+)\@([^\.]+)([\.\w+]+)>/;
($user,$domain,$tld) = ($1,$2,$3);
$mailaddi = $user . $klaffe . $domain . $tld;
print "user: $user, klaffe: $klaffe, domain: $domain, tld: $tld ";



Der Code hat allgemein einige Màngel. So würde er beispielsweise eine
Adresse der Art nicht richtig erkennen,
ausserdem fehlt der Regexp die Verankerung, so, dass sie ungewollt in
anderen Headerzeilen matchen kann.

Alternativer Vorschlag:

$mail =~ /^Delivered-To:\s+<?(.+?)@(.+)\.(.+?)>??$/;

Gruss

Roman°
IRC-Freenode: #usenet-friends
http://www.usenet-friends.ch.vu/

Ähnliche fragen