Регулярное выражение PHP для извлечения функций PHP из файлов кода.

StackOverflow https://stackoverflow.com/questions/2488498

Вопрос

Я пытаюсь создать регулярное выражение PHP для извлечения функций из исходного кода PHP.До сих пор я использовал рекурсивное регулярное выражение для извлечения всего между {}, но затем оно также соответствует таким вещам, как операторы if.Когда я использую что-то вроде:

preg_match_all("/(function .*\(.*\))({([^{}]+|(?R))*})/", $data, $matches);

Это не работает, если в файле более одной функции (вероятно, потому, что в рекурсивности также используется часть «функция»).

Есть какой-либо способ сделать это?

Пример файла:

<?php
if($useless)
{
  echo "i don't want this";
}

function bla($wut)
{
  echo "i do want this";
}
?>

Спасибо

Это было полезно?

Решение

регулярные выражения - неправильный способ сделать это.Учитывать токенизатор или отражение

Другие советы

Перенесено сюда из дублирующего вопроса: PHP, Regex и новые строки

Решение регулярного выражения:

$regex = '~
  function                 #function keyword
  \s+                      #any number of whitespaces 
  (?P<function_name>.*?)   #function name itself
  \s*                      #optional white spaces
  (?P<parameters>\(.*?\))  #function parameters
  \s*                      #optional white spaces
  (?P<body>\{.*?\})        #body of a function
~six';

if (preg_match_all($regex, $input, $matches)) {
  print_r($matches);
}

P.S.Как было предложено выше, токенизатор является предпочтительным способом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top