On Fri, Mar 27, 2009 at 9:40 AM, Shawn McKenzie <nospam@xxxxxxxxxxxxx> 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