Lena: split als regulärer Ausdruck

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

  1. 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.

    1. Hey Struppi

      vielen Dank! Daran habe ich gar nicht gedacht =]

      Viele Grüße von der Lena

  2. 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

    1. 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