php получить содержимое функции - возможно ли регулярное выражение?
У меня есть регулярное выражение для поиска всех определений функций. Теперь я хочу получить также содержимое функций, например, как третье поле в $matches
это возможно с помощью регулярных выражений, или мне нужен какой-то push-pop машина из-за вложенности {}
скобки? То, что я хочу сделать, это скрипт, который анализирует PHP-код и выясняет, какие функции имеют зависимости. Если сценарий уже есть, дайте мне знать!
$content = file_get_contents($fileName);
preg_match_all("/(function )(\w+\(.*?\))/", $content, $matches);
Я не хочу использовать php-tokenizer, потому что он вычисляет также некоторые "скрытые функции", такие как предопределенные функции и тому подобное, но мне нужны только функции, написанные в коде.
1 ответ
Даже если вы не хуже Ноама Хомского, вы должны понимать это:
PHP не является регулярным языком, поэтому не может быть выражен или проанализирован с помощью регулярных выражений.
Чтобы быть обычным языком, язык должен, помимо прочего, быть свободным от контекста.
"Без контекста" означает, что "слово" в языке означает одно и то же, независимо от того, где оно встречается. Это не относится к PHP. Фактически, даже ваш простой фрагмент для поиска сигнатур функций уже вылетает и горит здесь:
// function foo()
Контекст комментария аннулирует это function
Ключевое слово его обычного значения. Не говоря уже о:
'function foo()';
<<<HERE
function foo()
HERE;
и множество подобных примеров. function
Ключевое слово (и все остальное тоже) зависит от контекста, что делает PHP контекстно-зависимым языком, поэтому не является регулярным, и, следовательно, неосуществимым для анализа регулярными выражениями.
Используйте парсер.