split als regulärer Ausdruck
Lena
- perl
0 Struppi0 Lena
0 Norbert Klein0 Lena
Hallo zusammen,
folgendes Problem:
Ich habe folgende Variable:
$text = "+eins+zwei+drei"
jetzt hätte ich gernen einen regulären Ausdruck der mit
etwa folgende Liste zurückgibt:
("+eins", "+zwei", "+drei")
Beim probieren kam leider immer entweder die ganze Zeile (gierig) oder
bloss ("+e","+z","+d") (genügsam) heraus
Das eigentliche Problem ist etwas komplexer, ich kann dabei
nicht split verwenden!
Hoffe, es kann mir jemand helfen =)
Viele Grüße von der Lena
Ich habe folgende Variable:
$text = "+eins+zwei+drei"
jetzt hätte ich gernen einen regulären Ausdruck der mit
etwa folgende Liste zurückgibt:("+eins", "+zwei", "+drei")
Beim probieren kam leider immer entweder die ganze Zeile (gierig) oder
bloss ("+e","+z","+d") (genügsam) heraus
use Data::Dumper;
my $text = "+eins+zwei+drei";
my @s = $text =~ /(+[^+]*)/g;
print Dumper @s;
Struppi.
Hey Struppi
vielen Dank! Daran habe ich gar nicht gedacht =]
Viele Grüße von der Lena
Hallo Lena,
du kannst durchaus split verwenden, um die Zeichenkette aufzuteilen. Es gibt die Möglichkeit mit regulären Ausdrücken voraus und zurück zu schauen [1], hierbei wird kein Zeichen "gefressen".
Dein Script könnte dann entsprechend so ausschauen:
#!perl -w
use strict;
my $text = "+eins+zwei+drei";
my @liste = split(/(?=+)/,$text);
print join("\n",@liste);
Das (?=+) schaut hierbei nach, ob das nächste Zeichen ein Plus ist und wenn dem so ist, wird an der Stelle vor dem Plus ein Schnitt gemacht.
Schöne Grüße,
Norbert
[1] http://perldoc.perl.org/perlretut.html#Looking-ahead-and-looking-behind
Hallo Norbert,
vielen Dank für Deine Antwort.
Leider ist mein Problem etwas komplexer und so nicht ohne weiters lösbar,
aber gut zu wissen, dass man beim split auch einen reg. Ausdruck
verwenden kann =)
Viele Grüße von der Lena