preg_match_all обеспечивает отличные / уникальные результаты - PullRequest
1 голос
/ 16 февраля 2010

Я использую следующий код, чтобы сопоставить все переменные в скрипте, начинающиеся с '$', однако я бы хотел, чтобы результаты не содержали дубликатов, т.е. были бы разными / уникальными:

preg_match_all('/\$[a-zA-Z0-9]+/', $code, $variables);

Любой совет?

Ответы [ 3 ]

5 голосов
/ 16 февраля 2010

Используйте array_unique, чтобы удалить дубликаты из выходного массива:

preg_match_all('/\$[a-zA-Z0-9]+/', $code, $variables);
$variables = array_unique($variables[0]);

Но я надеюсь, что вы не пытаетесь разобрать PHP с этим. Используйте token_get_all, чтобы получить токены данного PHP-кода.

2 голосов
/ 16 февраля 2010

Не делайте этого с регулярным выражением. После того, как вы собрали их все в $variables, просто отфильтруйте их, используя обычную логику / операции программирования. Например, используя array_unique, как упомянул Гамбо.

Кроме того, что будет делать ваше регулярное выражение в следующих случаях:

// this is $not a var
foo('and this $var should also not appear!');
/* and what about $this one? */

Все три «переменные» ($not, $var и $this) не являются переменными, но будут соответствовать вашему регулярному выражению.

1 голос
/ 16 февраля 2010

Попробуйте следующий код:

preg_match_all('/\$[a-zA-Z0-9]+/', $code, $variables);
$variables = array_unique($variables);
...