Thread regex Klammern (6 answers)
Opened by perl at 2011-02-13 02:58

schubi
 2011-02-13 11:50
#145615 #145615
User since
2011-02-13
2 Artikel
BenutzerIn
[default_avatar]
Der gesamte Code sieht so aus
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$re = qr  /(?:[\s\n]*|[\s]*%[^\n]*\n)*
(?<first> # start capture buffer 1?<first>
\{ # match an opening paren
( # capture buffer 2
(?: # match one of:
(?> # don't backtrack over the inside of this group
[^{}]+ # one or more
) # end non backtracking group
| # ... or ...
(?&first) # recurse to opening 1 and try it again &first
)*? # 0 or more times.
) # end of buffer 2
\} # match a closing paren
) # end capture buffer one
/x;

$s="\\Befehl{1}{2}{3}";
print "Test mit \$re\$re\$re:\n";
if ($s =~ /\\Befehl$re$re$re/g){
foreach $expr (1..$#-) {
print "\targument $expr = $$expr\n";
};
};

$s="\\Befehl{1}{2}{3}";
print "Test mit \$re{3}\n";
if ($s =~ /\\Befehl$re{3}/g){
foreach $expr (1..$#-) {
print "\targument $expr = $$expr\n";
};
};

$s="\\Befehl{1}{2}{3}";
print "Test mit (?:\$re){3}\n";
if ($s =~ /\\Befehl(?:$re){3}/g){
foreach $expr (1..$#-) {
print "\targument $expr = $$expr\n";
};
};

und liefert
Quote
Test mit $re$re$re:
argument 1 = {1}
argument 2 = 1
argument 3 = {2}
argument 4 = 2
argument 5 = {3}
argument 6 = 3
Test mit $re{3}
argument 1 = {3}
argument 2 = 3
Test mit (?:$re){3}
argument 1 = {3}
argument 2 = 3


nur in der 1. Variante kann man auf alle $i zugreifen.
Last edited: 2011-02-13 12:08:11 +0100 (CET)

View full thread regex Klammern