linux-l: perl und regexpr

Jens Dreger jens.dreger at physik.fu-berlin.de
Mi Jan 17 01:14:40 CET 2001


On Wed, Jan 17, 2001 at 12:57:13AM +0100, Ulrich Wiederhold wrote:
> Hallo,
> mal wieder ein kleines Perl-Problem, womit ich einfach nicht
> weiterkomme.
> Ich möchte bei einem String alle Zeichen vor einer bestimmten Zeichen,
> z.b. @ abschneiden und alle Zeichen nach einer bestimmten Zeichenkette,
> also z.B. .de. Das Mittelstück will ich weiterverwenden.
> 
> Meine Versuche sind bisweilen an folgendem gescheitert!
> :(
> 
> $var[0] =~ s/^(.*)(@.*de)(.*)$/$2/;
> 

Was funktioniert daran nicht ?? Bitte immer Beispiele angeben.

Das geht natuerlich schief, wenn mehrere '@' Zeichen in dem String
sind, weil das '@' im pattern das letzte nehmen wird (weil .* soviel
nimmt, wie es kriegen kann), es sei denn, hinter dem letzten '@' folgt
kein 'de' mehr. /.*?/ nimmt so wenig wie moeglich. 

-------8<---------------
#!/usr/local/bin/perl -lw
my $var = "some junk blah.blub\@some.domain.de some more junk";
$var =~ s/^(.*)(@.*de)(.*)$/$2/;
print $var;
---------8<-----------

liefert: @some.domain.de

> Wann verwendet man eigentich : anstelle von /? Habe ich beides gesehen!

Kannst alle Sonderzeichen nehmen, die nicht im pattern selbst
vorkommen. Wenn Du irgendwas mit Pfadnamen machst, und dementsprechend
tonnenweise '/' im pattern hast, begrenzt Du ihn eben mit '|' oder '#'
oder sonstwas: $var =~ s|^(.*)(@.*de)(.*)$|$2|;

Gruss,

Jens.



Mehr Informationen über die Mailingliste linux-l