private function getRegex($tagName)
{
$regex = '';
if ('tag' == $tagName) {
$begin = $this->config['tpl_begin'];
$end = $this->config['tpl_end'];
if (strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1) {
$regex = $begin . '((?:[\\$]{1,2}[a-wA-w_]|[\\:\\~][\\$a-wA-w_]|[+]{2}[\\$][a-wA-w_]|[-]{2}[\\$][a-wA-w_]|\\/[\\*\\/])(?>[^' . $end . ']*))' . $end;
} else {
$regex = $begin . '((?:[\\$]{1,2}[a-wA-w_]|[\\:\\~][\\$a-wA-w_]|[+]{2}[\\$][a-wA-w_]|[-]{2}[\\$][a-wA-w_]|\\/[\\*\\/])(?>(?:(?!' . $end . ').)*))' . $end;
}
} else {
$begin = $this->config['taglib_begin'];
$end = $this->config['taglib_end'];
$single = strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1 ? true : false;
switch ($tagName) {
case 'block':
if ($single) {
$regex = $begin . '(?:' . $tagName . '\\b(?>(?:(?!name=).)*)\\bname=([\'\\"])(?P<name>[\\$\\w\\-\\/\\.]+)\\1(?>[^' . $end . ']*)|\\/' . $tagName . ')' . $end;
} else {
$regex = $begin . '(?:' . $tagName . '\\b(?>(?:(?!name=).)*)\\bname=([\'\\"])(?P<name>[\\$\\w\\-\\/\\.]+)\\1(?>(?:(?!' . $end . ').)*)|\\/' . $tagName . ')' . $end;
}
break;
case 'literal':
if ($single) {
$regex = '(' . $begin . $tagName . '\\b(?>[^' . $end . ']*)' . $end . ')';
$regex .= '(?:(?>[^' . $begin . ']*)(?>(?!' . $begin . '(?>' . $tagName . '\\b[^' . $end . ']*|\\/' . $tagName . ')' . $end . ')' . $begin . '[^' . $begin . ']*)*)';
$regex .= '(' . $begin . '\\/' . $tagName . $end . ')';
} else {
$regex = '(' . $begin . $tagName . '\\b(?>(?:(?!' . $end . ').)*)' . $end . ')';
$regex .= '(?:(?>(?:(?!' . $begin . ').)*)(?>(?!' . $begin . '(?>' . $tagName . '\\b(?>(?:(?!' . $end . ').)*)|\\/' . $tagName . ')' . $end . ')' . $begin . '(?>(?:(?!' . $begin . ').)*))*)';
$regex .= '(' . $begin . '\\/' . $tagName . $end . ')';
}
break;
case 'restoreliteral':
$regex = '<!--###literal(\\d+)###-->';
break;
case 'include':
$name = 'file';
case 'taglib':
case 'layout':
case 'extend':
if (empty($name)) {
$name = 'name';
}
if ($single) {
$regex = $begin . $tagName . '\\b(?>(?:(?!' . $name . '=).)*)\\b' . $name . '=([\'\\"])(?P<name>[\\$\\w\\-\\/\\.\\:@,\\\\]+)\\1(?>[^' . $end . ']*)' . $end;
} else {
$regex = $begin . $tagName . '\\b(?>(?:(?!' . $name . '=).)*)\\b' . $name . '=([\'\\"])(?P<name>[\\$\\w\\-\\/\\.\\:@,\\\\]+)\\1(?>(?:(?!' . $end . ').)*)' . $end;
}
break;
}
}
return '/' . $regex . '/is';
}