my $re;
$re = qr{
(?:
0 # 0
(??{$re}) # Balanced 1's and 0's
1 # 1
|
1 # 1
(??{$re}) # Balanced 1's and 0's
0 # 0
)*
}x;
/^$re\z/;
####
my $re;
$re = qr{
(?:
0 # 0
(?> # If I get here, do not backtrack!
(??{$re}) # Balanced 1's and 0's
)
1 # 1
|
1 # 1
(?> # If I get here, do not backtrack!
(??{$re}) # Balanced 1's and 0's
)
0 # 0
)*
}x;
for (qw(1001 11100 000111 00111), "101"x50) {
if (/^$re\z/) {
print "$_ matched\n";
}
else {
print "$_ did not match\n";
}
}
####
my $re;
$re = qr{
(?:
0 # 0
(??{$re}) # Balanced 1's and 0's
1 # 1
|
1 # 1
(?> # If I get here, do not backtrack!
(??{$re}) # Balanced 1's and 0's
)
0 # 0
)*?
}x;
for (qw(1001 11100 000111 00111), "101"x50) {
if (/^$re\z/) {
print "$_ matched\n";
}
else {
print "$_ did not match\n";
}
}
####
my $re;
$re = qr{
(?> # Avoid backtracking
0 # 0
(??{$re}) # Balanced 1's and 0's
1 # 1
|
1 # 1
(??{$re}) # Balanced 1's and 0's
0 # 0
)*?
}x;
for (qw(1001 11100 000111 00111), "101"x50) {
if (/^$re\z/) {
print "$_ matched\n";
}
else {
print "$_ did not match\n";
}
}