无论我多么努力,我都无法计算出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]+