Thread RegEx Modifier /x: ... vermurkst Klammerung? (3 answers)
Opened by Linuxer at 2007-03-14 01:43

Linuxer
 2007-03-14 01:43
#75038 #75038
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Hallo zusammen,

ich verstehe nicht, warum die folgende RegEx ohne /x Modifier wie gewünscht funktioniert, mit /x aber nicht...


RegEx ohne /x:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

my $text = <<EOF;
# So, denn fangen wir mal an:
# wirklich
EOF

# qr// willentlich nicht benutzt
my $cmt = '\s*#[^\n]+\n';

# Dieser RegEx arbeitet wie erwartet
my $re_grp = qr/((?:$cmt)*)/ms;

if ( $text =~ $re_grp ) {
print "Gefunden!\n";
print $1, $/;
}


Resultat:
Code: (dl )
1
2
3
Gefunden!
# So, denn fangen wir mal an:
# wirklich


Aber RegEx mit /x:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

my $text = <<EOF;
# So, denn fangen wir mal an:
# wirklich
EOF

# qr// willentlich nicht benutzt
my $cmt = '\s*#[^\n]+\n';

# Dieser RegEx arbeitet *nicht* wie erwartet
my $re_grp = qr/((?:$cmt)*)/msx;


if ( $text =~ $re_grp ) {
print "Gefunden!\n";
print $1, $/;
}


Resultat:
Code: (dl )
Unmatched ( in regex; marked by <-- HERE in m/(( <-- HERE ?:\s*#[^\n]+\n)*)/ at regex.tst.pl line 15.


Habe ich da etwas verpasst?
Modifier /x sollte doch eigentlich bewirken, dass nicht-maskierte Whitespaces und nicht-maskierte # ignoriert werden. Aber seit wann hat das Auswirkungen auf Klammerungen?
Überseh ich da was zu später Stunde?

Danke && Gruß,
Linuxer

edit:
Kommentarfehler im 2. Perl-Code korrigiert\n\n

<!--EDIT|Linuxer|1173830632-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread RegEx Modifier /x: ... vermurkst Klammerung?