Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8839[/thread]

RegEx Modifier /x: ... vermurkst Klammerung?



<< >> 4 Einträge, 1 Seite
Linuxer
 2007-03-14 01:43
#75038 #75038
User since
2006-01-27
3875 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!
pktm
 2007-03-14 01:50
#75039 #75039
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
In $cmt kommt ein # vor, was bei /x als Kommentar gewertet wird.\n\n

<!--EDIT|pktm|1173829873-->
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2007-03-14 02:00
#75040 #75040
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
*zusammenklapp*

Danke .... ich glaube, ich sollte schlafen gehen .... *grml*

edit:
Und ich tipp es noch ein ... "nicht maskierte #" ...

edit2:
kaum macht man es richtig, funktioniert es ....\n\n

<!--EDIT|Linuxer|1173830562-->
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!
betterworld
 2007-03-14 07:30
#75041 #75041
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Schreib doch $cmt auch als qr, dann sollte das funktionieren.
<< >> 4 Einträge, 1 Seite



View all threads created 2007-03-14 01:43.