可以在PHP中跟随$变量的字符

时间:2014-07-17 02:51:35

标签: php variables

我正在寻找可以在PHP中跟随$变量的字符列表。原始任务是遍历文件并用不同的文本替换变量的每个实例。但是,如果文件包含$cat$cat2,并且我只是将$cat的每个实例替换为$dog,那么我会$dog2并且无法替换{{} 1}} $cat2如果我愿意的话。

可能的解决方案:按长度排序并先做最长的变量?

最明显的一个:$dog3

例如,您可以拥有一个包含以下行的PHP文件:

),.&+-/*:;%?=[<>!|

如您所见,变量后面跟着“”,“,”和“)”。 我还缺少什么?谢谢你的帮助,伙计们。

3 个答案:

答案 0 :(得分:4)

实现它只是为了好玩(即使我仍然不明白你为什么需要它):

$code = '<?php

$cat = "foo";
$cat2 = "bar";
$dog = "baz";

';

$replace = array(
    'cat' => 'dog',
    'cat2' => 'not_dog',
    'dog' => 'cat',
);

$tokens = token_get_all($code);

$newCode = '';

foreach ($tokens as $token) {
    if (is_array($token)) {
        if ($token[0] == T_VARIABLE) {
            $variableName = substr($token[1], 1);
            if (array_key_exists($variableName, $replace)) {
                $token[1] = sprintf('$%s', $replace[$variableName]);
            }
        }

        $part = $token[1];
    } else {
        $part = $token;
    }

    $newCode .= $part;
}

echo $newCode;

演示:http://ideone.com/WUlRdo

答案 1 :(得分:0)

从PHP手册 -

  

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。作为正则表达式,它将表达为:'[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

所以你去 - 如果你想替换变量的所有实例,你只需要取消该正则表达式中的第二个字符类。

preg_replace('/\$replaceMe([^a-zA-Z0-9_\x7f-\xff]|$)/', '$bar', $myCode);

答案 2 :(得分:0)

除了你发布的那些:

  • 空白和新行
  • (,如:$obj = new $variableClassName()
  • \double quoted string内的变量后转义字符,例如"\"$variable\""
  • #代码注释,如$variable#comment