wieder mal regex

16/10/2010 - 13:08 von Nils Müller | Report spam
Mahlzeit,

irgendwie bekomme ich das mit den regulàren Ausdrücken nicht in meinen Kopf.

Ich habe folgende Zeichenkette:

"Überschrift1 123 wort1 wort2 und das will ich haben".
"Überschrift2 124 wort3 wort4 und dies möchte ich auch haben".

Ich möchte jeweils den Text nach den zwei einzelnen Wörtern (im Beispiel: "wort2" und
"wort4") aus jeder Zeile haben. Das Format bleibt soweit gleich. Ich habe mir gedacht ich
suche nach der Zeilennummerierung (im Beispiel: "123" und "124") und hole mir mal eben
ganz einfach den Text. Mein bisheriger (Fehl-)Versuch sieht so aus:

my $var = "123";
$var = " " . $var . " "; # Leerzeichen vor und hinter 123

$args =~ /($var)(.*) (.*) (.*)/;
my $str = $1;
my $str2 = $2;
my $str3 = $3;
my $str4 = $4;

Mein Ergebnis:
output: 319
output2: wort1 wort2 und das will
output3: ich
output4: haben

Ich hatte vermutet dass ich folgendes Ergebnis erhalte:
output: 319
output2: wort1
output3: wort2
output4: und das will ich haben

Ich brauche nur die Ausgabe die in output4 angegeben ist.

Danke für die Hilfe
 

Lesen sie die antworten

#1 Moritz Lenz
16/10/2010 - 13:46 | Warnen spam
On 10/16/2010 01:08 PM, Nils Müller wrote:
$args =~ /($var)(.*) (.*) (.*)/;



.* matcht *ALLES*, inklusive möglicher Leerzeichen. Oder eben auch den
Leeren String. Wenn du das nicht möchtest, nimm \s+.

Aber wàre split() nicht einfacher?

my ($token, $line_number, $word1, $word2, $rest) = split /\s+/, $args, 5;

(Wenn du einige dieser Variablen nicht brauchst, kannst du sie durch
undef ersetzen).

Moritz

Moritz Lenz
http://perl-6.de/ http://perlgeek.de/ http://perl6.org/

Ähnliche fragen