Hallo zusammen,
ich verstehe nicht, warum die folgende RegEx ohne /x Modifier wie gewünscht funktioniert, mit /x aber nicht...
RegEx ohne /x:
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:
Gefunden!
# So, denn fangen wir mal an:
# wirklich
Aber RegEx mit /x:
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:
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!