我正在寻找可以在PHP中跟随$变量的字符列表。原始任务是遍历文件并用不同的文本替换变量的每个实例。但是,如果文件包含$cat
和$cat2
,并且我只是将$cat
的每个实例替换为$dog
,那么我会$dog2
并且无法替换{{} 1}} $cat2
如果我愿意的话。
可能的解决方案:按长度排序并先做最长的变量?
最明显的一个:$dog3
例如,您可以拥有一个包含以下行的PHP文件:
),.&+-/*:;%?=[<>!|
如您所见,变量后面跟着“”,“,”和“)”。 我还缺少什么?谢谢你的帮助,伙计们。
答案 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;
答案 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