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.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|