Perl: split() Funktion und RegExp
-
Hi,
ich splitte einen String in Perl folgendermaßen:
my $str = 'This is "a test" string!'; my @strp = split(/ /, $str); for(my $i=0; $i < @strp; ++$i){ print $strp[$i] . "\n"; }
Als Ausgabe erhalte ich nun:
This is "a test" string!
Wie kann ich der split() Funktion über die Rexgular Expressions beibringen, dass sie am Leerzeichen zwischen "a test" nicht splitten soll, da dieser Ausdruck ja in Anführungszeichen steht?
Mein Ziel ist es praktisch, folgendes Resultat zu erhalten:
This is "a test" string!
Besten Dank für euere Hilfe!
-
EDIT:
Sorry hab mich beim Resultat verschrieben.
Es soll natürlich so aussehen:This is a test string!
Also die Anführungszeichen selbstverständlich nicht mehr dabei.
Danke!
-
hmm könnte so klappen:
my $str = 'This is "a test" string!'; $str =~ /^([\w\s]+?)\s\"([\w\s]+?)\"\s([\w\s]+?)$/; my @strp = split(/ /, $1); push(@strp, $2); @strp = (@strp, split(/ /, $3);
ungetestet, gerade kein Perl zur Hand...
-
Hab das ganze mal durch den Interpreter laufen lassen:
my $str = 'This is "a test" string!'; $str =~ /^([\w\s]+?)\s\"([\w\s]+?)\"\s([\w\s]+?)$/; my @strp = split(/ /, $1); push(@strp, $2); @strp = (@strp, split(/ /, $3)); for(my $i=0; $i < @strp; ++$i){ print $strp[$i] . "\n"; }
Leider bekomme ich nichts ausgegeben. Irgendetwas funktioniert also nicht so wie es sollte..
-
ok, hier ist es leicht verändert wegen dem Ausrufezeichen:
use strict; my $str = 'This is "a test" string!'; $str =~ /^([\w\s]+?)\s\"([\w\s]+?)\"\s(.+?)$/; my @strp = split(/ /, $1); push(@strp, $2); @strp = (@strp, split(/ /, $3)); foreach my $s (@strp) { print "$s\n"; }