On Fri, Mar 27, 2009 at 9:40 AM, Shawn McKenzie <nos...@mckenzies.net> wrote:
> I'm normally OK with regex, especially if I fiddle with it long enough,
> however I have fiddled with this one so long that I'm either totally
> missing it or it's something simple.  Does it have anything to do with
> the backref, or the fact that the value of the backref has a $?  I have:
>
> $out = '
> {$sites}
> <tr>
>        <td>
>        {Site.id}
>        </td>
> </tr>
> {/$sites}';
>
> And I want to capture the first {$tag}, everything in between and the
> last {$/tag}.  I have tried several things and here is my current regex
> that looks like it should work, but doesn't:
>
> preg_match_all('|{\$([^}]+)}(.+)({/\1})|Us', $out, $matches);

Shawn,

First thing I see--your first capture group doesn't include the $, and
so your final capture group will always fail given your current $out
(because it's looking for {/sites} instead of {/$sites}). Also, your
{} are outside of your capture group in \1, but inside in \3. Here's
what I came up with:

$out = '
{$sites}
<tr>
       <td>
       {Site.id}
       </td>
</tr>
{/$sites}';
$matches = array();
preg_match_all('#{(\$[^}]+)}(.*?){(/\1)}#s', $out, $matches);
print_r($matches);

Produces this:

Array
(
    [0] => Array
        (
            [0] => {$sites}
<tr>
       <td>
       {Site.id}
       </td>
</tr>
{/$sites}
        )

    [1] => Array
        (
            [0] => $sites
        )

    [2] => Array
        (
            [0] =>
<tr>
       <td>
       {Site.id}
       </td>
</tr>

        )

    [3] => Array
        (
            [0] => /$sites
        )

)

Keep in mind, I had to view the page source in order to see the HTML
tags, but it showed me everything I expected to see.

HTH,

-- 
// Todd

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to