php正则表达式匹配模板标签

时间:2014-01-13 16:06:38

标签: php regex

我在PHP文件中有一些模板标签,我似乎无法与正则表达式匹配。实际上,我正在使用的是我以前做过的工作,但这次我不能让它工作。所有模板标签看起来都像{$EXAMPLE},两个波浪形围绕一个美元符号,后面跟着任何东西。实际上,单词示例将始终为大写,可能包含下划线或短划线,但该部分并非真正必要。我已经是这样的:

模板文件:

{$HEADER}
{$MENU}
{$BODY}
{$FOOTER}

PHP文件:

$template = file_get_contents(TEMPLATE);
preg_match_all('^{$.*}^U', $template, $matches);
var_dump($matches);

其中var_dump输出一个空数组。

3 个答案:

答案 0 :(得分:1)

由于花括号和美元符号为meta-characters,因此需要使用反斜杠转义它们。将正则表达式从^{$.*}^U更改为^\\{\\$.*\\}^U,您的代码将完美运行。

答案 1 :(得分:1)

试试这个:

$template = file_get_contents(TEMPLATE);
preg_match_all('/^(\{\$.*\})^U/', $template, $matches);
var_dump($matches);

点击此处观看现场演示:http://rubular.com/r/52kKX0dIdl

答案 2 :(得分:1)

您可以使用:

preg_match_all('~{\$[^}]+}~', $template, $matches); // negated character class + greedy quantifier

preg_match_all('~{\$[A-Z_-]+}~', $template, $matches); // follows your description