我在PHP文件中有一些模板标签,我似乎无法与正则表达式匹配。实际上,我正在使用的是我以前做过的工作,但这次我不能让它工作。所有模板标签看起来都像{$EXAMPLE}
,两个波浪形围绕一个美元符号,后面跟着任何东西。实际上,单词示例将始终为大写,可能包含下划线或短划线,但该部分并非真正必要。我已经是这样的:
模板文件:
{$HEADER}
{$MENU}
{$BODY}
{$FOOTER}
PHP文件:
$template = file_get_contents(TEMPLATE);
preg_match_all('^{$.*}^U', $template, $matches);
var_dump($matches);
其中var_dump
输出一个空数组。
答案 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