Когда я самостоятельно писал свой парсер шаблонов я делал что-то вроде:

Код:
{tbl users}<table ...>
<!--Заголовок-->
<tr><th>Имя</th><th>Возраст</th><th>Пол</th></tr>
{tblrow username age gender}
<tr><td>{username}</td><td>{age}</td><td>{gender}</td></tr>
{/tblrow}
</table>
{/tbl}
Это все пасится с помощью регулрных выражений, ну а дальше дело техники.
А вообще - зачем изобретать велосепед, когда есть уже готовые шаблонизаторы, такие как
Smarty?