PHP reg表达式检测字符串中的变量



无论我多么努力,我都无法计算出reg表达式。需要一些帮助漂亮的请:

我希望能够在一个字符串中找到所有php变量。例如:

$isTrue ? $a : $b
or
$a=$b * ($c + 1)

问题是变量可以在行的开头/末尾。它们前后可能有空间,也可能没有空间。可能有一个=或一个?或a!=或a(或a(或<或者>甚至$是True。基本上——任何不是字母或数字的东西。

如何使用RegEx完成此操作?

非常感谢!

使用正则表达式是一个很难解决的问题,因为后面跟着单词字符的$的标称模式在许多情况下都会失败。

然而,PHP有一个内置的PHP解析器,您可以调用它:token_get_all。您可以使用它来查找一些PHP代码中的所有令牌,然后根据令牌是否为变量名进行过滤:

function get_variables($code) {
// get all the tokens
$tokens = token_get_all("<?php $code ?>");
// filter out non-variables
$tokens = array_filter($tokens, function ($t) { return $t[0] == T_VARIABLE; });
// return the variable names
return array_column($tokens, 1);
}
print_r(get_variables('$isTrue ? $a : $b'));
print_r(get_variables('$a=$b * ($c + 1)'));

输出:

(
[0] => $isTrue
[1] => $a
[2] => $b
)
Array
(
[0] => $a
[1] => $b
[2] => $c
)

3v4l.org 上的演示

哦。。我想我明白了!$[a-zA-Z0-9]+

最新更新