Есть кусок простого шаблонизатора. В нем не понятно что заменяется в первой строке- что такое "\x03"? Код (PHP): $tplPage = <<<TEXT <html> <head> <title>{title}</title> </head> <body> {menu|#tplMenu} {content|#tplContent} {footer|#tplFooter} </body> </html> TEXT; //-------------------------------------- $template = strtr($template,array('{{'=>"\x03",'}}'=>"\x04")); preg_match_all("/\{([^\}]+)\}/i",$template,$matches); var_dump($matches); Также не понятно, почему var_dump в последней строке из примера выше выводит массив из двух частей (см.ниже), вместо просто измененного массива Код (PHP): array (size=2) 0 => array (size=4) 0 => string '{title}' (length=7) 1 => string '{menu|#tplMenu}' (length=15) 2 => string '{content|#tplContent}' (length=21) 3 => string '{footer|#tplFooter}' (length=19) 1 => array (size=4) 0 => string 'title' (length=5) 1 => string 'menu|#tplMenu' (length=13) 2 => string 'content|#tplContent' (length=19) 3 => string 'footer|#tplFooter' (length=17)
\x03 \x04 это шестнадцатеричные значения 0x03 и 0x04 (или 3 и 4 десятеричные). авторы шаблонизатора умело меняют открывающиеся и закрывающиеся теги на эти байты, которые в таблице ASCII значат ETX EOT то есть это просто временный маркер внутри шаблонизатора. к пользователю это не отправляется и нужно только в процессе разбора шаблона по второму вопросу - почитайте ман по любой реализации регулярных выражений. ВСЕГДА ЛЮБОЙ движок первым элементом записывает текст который привел к совпадению а потом уже N-элементов соответствия N-шаблонам в регулярке. сравните 00 и 10 - 0 => string '{title}' (length=7) 0 => string 'title' (length=5)