Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re^3: Recursive Regular Expression Help

by nobull (Friar)
on Apr 12, 2008 at 14:03 UTC ( #679991=note: print w/replies, xml ) Need Help??

in reply to Re^2: Recursive Regular Expression Help
in thread Recursive Regular Expression Help

So you had some working code, you made a change, and problems ensued?

Perhaps if you showed us the change you made we could see what you did wrong. At a random shout in the dark you inserted stuff inside the recursive part of the pattern. PCRE now supports the reusable sub-expression syntax.

The problem of matched parentheses is the most commonly quoted example of using this construct.

my $bal = qr/ (?<bal> # Name the rule (optional) \{ # Open brace (?> # Possessive subgroup (?> [^{}]+ ) # Grab all the non braces | # or (?&bal) # Recurse )* # Zero or more times \} # Close brace ) # End named rule /x; if ('{x{x}y{x}x}' =~ /^$bal$/ ){ print "It's balanced\n"; } $_= 'XXXX function xxx() {x{x}y{x}x} XXXX'; while ( /\bfunction\s+(\w+)\(\)\s*($bal)/g ){ print "function: $1\nbody: $2\n"; }

This, of course, is Perl code - adapting it to PHP is left as a exercise for the reader.

I should add, this only checks for nested {} it doesn't know to ignore {} within quotes - that too is possible by hybridising the above with the tricks for parsing CSV.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://679991]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (5)
As of 2023-06-01 08:21 GMT
Find Nodes?
    Voting Booth?

    No recent polls found