PHP正则表达式问题

时间:2009-02-10 15:42:29

标签: php regex

是否有可能在PHP文件中创建一个像<?php echo $variable ?>那样读取{variable}的正则表达式?

由于

雷米

5 个答案:

答案 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或代码编辑器中编写一个宏来自动替换你。