[Munich-pm] [halb OT] pcre für Postfix-Adressumschreibung
Rouchal, Marek
marek.rouchal at intel.com
Mo Jun 9 23:34:20 PDT 2014
Ein guter Artikel zum Thema hier:
http://blog.mariusschulz.com/2014/06/03/why-using-in-regular-expressions-is-almost-never-what-you-actually-want
Auf dieses Problem uebertragen hiesse das wohl:
<[^>\@]+\@
statt
<.*?@
statt
<.*@
Und die Behandlung der Nummer wuerde ich in ein wenig Code einpacken, etwa so:
while( $while =~ s{^To:\s*([^<]*)<[^>\@]*\@\+([^>]*)>}{
my ($to,$num) = ($1,$2);
$num =~ s/\D+//g;
"To: $to <00$num\@faxmaker.com>"
}ge ) {}
print "while: $while\n";
Dann gehen auch Nummern wie +49 (89) 998-123456
Gruesse,
Marek
-----Original Message-----
From: Munich-pm [mailto:munich-pm-bounces+marek.rouchal=intel.com at pm.org] On Behalf Of Stephen Riehm
Sent: Monday, June 09, 2014 10:51 PM
To: Andreas Hernitscheck
Cc: Perl Mongers MUC
Subject: Re: [Munich-pm] [halb OT] pcre für Postfix-Adressumschreibung
Hi Stefan,
Ich denke zwei Kleinigkeiten müssten schon reichen:
<.*?@ statt <.*@
und um mehrerer Empfänger zu behandeln entweder eine Vereinfachte Pattern und /g oder eine while Schleife, etwa so:
$orig = 'To: =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +41 (8621) 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?= <LHG2 at +49 3212-1150047>';
print "was: $orig\n";
$while = $orig;
while( $while =~ s/^To:\s*(.*)<.*?@\+(\d+).*?(\d+).*?(\d+)>/To: $1 <00$2$3$4\@faxmaker.com>/ ) {}
print "while: $while\n";
$subst = $orig;
$subst =~ s/<.*?@\+(\d+).*?(\d+).*?(\d+)>/<00$1$2$3\@faxmaker.com>/g;
print "subst: $subst\n";
Cheers,
Steve
On 09.06.2014, at 21:44, Andreas Hernitscheck <tech at tool.de> wrote:
> Hallo Stefan,
>
> es wäre leichter wenn du in Worten erklärst, was der Regex denn nun tun soll?
>
> Geht denn kein ///g am Ende, um es mehrmals durchführen zu lassen?
>
> Durch einfaches Regex kann man es nicht lösen. Das Wiederholen muss schon vom Interpreter z.B. durch /g nutzbar gemacht werden.
>
> Gibt es vielleicht die Möglichkeit das durch ein externes Script zu jagen?
>
>
>
>
> Am 09.06.14 10:29, schrieb Stefan Bauer:
>> Hallo nach München und Umgebung,
>>
>> ich habe hier ein kniffliges Problem und verzweifle an der Lösung. Mit Postfix gibt es die Möglichkeit, das To: Feld im E-Mail Header umzuschreiben.
>>
>> Das klappt mit meiner Regex prima für einen Empfänger - bei mehreren Empfängern gehen mir die Ideen aus, wie ich das umsetzen kann:
>>
>> Mein Input-String ist:
>>
>> To: =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +49 (8621)
>> 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?= <LHG2 at +49
>> 3212-1150047>
>>
>> Mit folgender Anweisung setze ich den String um:
>>
>> /^To:\s*(.*)<.*@\+(\d+).*?(\d+).*?(\d+)>/ To: $1 <00$2$3$4 at faxmaker.com>
>>
>> Auf der Kommandozeile sieht man auch das Ergebnis (leider nur beim letzten Empfänger):
>>
>> root at srv1:/home/stefan# postmap -q "To:
>> =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +49 (8621)
>> 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?= <LHG2 at +49
>> 3212-1150047>" pcre:/etc/postfix/rewrite_tofieldTo:
>> =?windows-1252?Q?LHG_1_=28Fax_Gesch=E4ft=29?= <LHG 1 at +49 (8621)
>> 9960237>, =?windows-1252?Q?LHG_2_=28Fax_Gesch=E4ft=29?=
>> <004932121150047 at faxmaker.com>
>>
>> Danke
>>
>> Stefan
>>
>>
>> _______________________________________________
>> Munich-pm mailing list
>> http://munich.pm.org/
>> Munich-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/munich-pm
>
> --
> Andreas Hernitscheck
>
> E-mail:
> tech at tool.de
>
>
> Gertrud-Bäumer-Str. 14
> 80637 Munich, Germany
>
> Phone: +49 176 210 16 397
>
> GPG:
> http://xantavia.net/downloads/team/andreashernitscheck/gpg/andreashern
> itscheck.asc
>
>
>
>
> _______________________________________________
> Munich-pm mailing list http://munich.pm.org/ Munich-pm at pm.org
> http://mail.pm.org/mailman/listinfo/munich-pm
_______________________________________________
Munich-pm mailing list http://munich.pm.org/ Munich-pm at pm.org http://mail.pm.org/mailman/listinfo/munich-pm
Mehr Informationen über die Mailingliste Munich-pm