The following pattern matches a function foo() which may contain
balanced parentheses as the argument.
$re = qr{ ( # paren group 1 (full function)
foo
( # paren group 2 (parens)
\(
( # paren group 3 (contents of parens)
(?:
(?> [^()]+ ) # Non-parens without backtracking
|
(?2) # Recurse to start of paren group 2
)*
)
\)
)
)
}x;
####
#!/bin/perl -w
use strict;
#(?:[^{}#]|(?:\\).)*
#(?: (?:\{2}+) (?:[^{}#]* | (?:\\.)) )*
my $re = qr'^ (
{
(
{
(
(?:
(?> [^{}]+ )
|
(?2)
)*
)
}
)*$
)
'x;
while (<>) {
printf "%s\n", m{$re} ? "match" : "nomatch";
/^q/ && exit;
}
####
my $re = qr'^ (
{
(?
{
(
(?:
(?> [^{}]+ )
|
(\q)
)*
)
}
)*$
)
'x;