是否有可能在PHP文件中创建一个像<?php echo $variable ?>
那样读取{variable}的正则表达式?
由于
雷米
答案 0 :(得分:4)
PHP手册已经提供了regular expression for variable names:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
你只需要改变它:
\{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\}
你已经完成了。
编辑您应该知道,这种事件as Ross proposed的简单顺序重播可能会导致某些不需要的行为,例如,替换也包含此类变量。
因此,您应该更好地解析代码并单独替换这些变量。一个例子:
$tokens = preg_split('/(\{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\})/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
for ($i=1, $n=count($tokens); $i<$n; $i+=2) {
$name = substr($tokens[$i], 1, -1);
if (isset($variables[$name])) {
$tokens[$i] = $variables[$name];
} else {
// Error: variable missing
}
}
$string = implode('', $tokens);
答案 1 :(得分:3)
听起来你正在尝试做一些模板变量替换;)
我建议先在数组中收集变量,然后使用类似的东西:
// Variables are stored in $vars which is an array
foreach ($vars as $name => $value) {
$str = str_replace('{' . $name . '}', $value, $str);
}
答案 2 :(得分:0)
{实际上不是答案,但需要澄清}
你可以扩展你的问题吗?您是否要将正则表达式应用于$ variable的内容?
答案 3 :(得分:0)
以下行应使用全局变量{variable}
的值替换字符串“$variable
”的所有出现:
$mystring = preg_replace_callback(
'/\{([a-zA-Z][\w\d]+)\}/',
create_function('$matches', 'return $GLOBALS[$matches[1]];'),
$mystring);
编辑:将Gumbo提到的正则表达式替换为精确捕获所有可能的PHP变量名称。
答案 4 :(得分:0)
(in comments)我希望能够输入
{variable}
而不是<?php echo $variable ?>
原始方法:您可以使用外部程序(例如Python脚本)预处理文件,进行以下正则表达式替换:
"{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}"
带
"<?php echo $\g<1> ?>"
更好的方法:在IDE或代码编辑器中编写一个宏来自动替换你。