Thread qr// Regex Problem (8 answers)
Opened by MatthiasW at 2008-02-21 19:49

MatthiasW
 2008-02-21 19:49
#106194 #106194
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich versuche jeweils am Anfang eines Strings folgendes Muster zu matchen:
- doppelte oder einfache Anführungszeichen
- irgendwelche Zeichen, ein backslash escaped das darauf folgende zeichen
- die zu anfang verwendeten anführungszeichen

Mir fällt es leider schwer, das in einem regulären Ausdruck zu schreiben, mein Versuch ist folgender:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my $rx = qr/
(["']) # save " or ' in $1
(?: # group
[\\]{2} # double escape
| # OR
[\\]$1 # escaped end of data
| # OR
[\\][a-z] # escaped letter ( escape sequence )
| # OR
[^\\\n\r$1] # other useable characters
) * # end group, any times
$1 # content of $1
/x;

# ...später dann...

$string =~ /^($rx)/;

Wenn ich den Code laufen lasse, passiert folgendes:
Ich bekomme 3 mal die "Use of uninitialized value..." Warnung, dass führe ich auf die 3 $1 zurück. Weiterhin funktioniert die regex nicht wie erwartet, sie matcht zu viel ( das hängt wohl mit den uninitialisierten Werten zusammen ).

Folgende regex funktioniert übrigens prima, beschränkt jedoch die Wahl der Anführungszeichen:
Code: (dl )
my $rx = qr/" (?: [\\]{2} | [\\]" | [\\][a-z] | [^\\"\n\r] ) * "/x;

Ich freue mich schon auf Anregungen!

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'

View full thread qr// Regex Problem