I could never figure out reg expressions, no matter how hard I tried. Need some help pretty please:
I want to be able to find all php variables in a string. for instance:
$isTrue ? $a : $b
or
$a=$b * ($c + 1)
The thing is that variables can be at the begining/end of line. They may or may not have a space before/after them. There may be a = or a ? or a != or a ( or a ) or < or > or even !$isTrue. Basically – anything that is not a letter or number.
How can I do this using RegEx?
Thanks so much!
Advertisement
Answer
This is a difficult problem to solve using regex as the nominal pattern of a $
followed by word characters will fail in many situations.
However PHP has a built-in PHP parser that you can call: token_get_all
. You can use this to find all the tokens in some PHP code, then filter that based on whether the token is a variable name or not:
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)'));
Output:
(
[0] => $isTrue
[1] => $a
[2] => $b
)
Array
(
[0] => $a
[1] => $b
[2] => $c
)