PHP регулярное выражение для извлечения функций PHP из файлов кода - PullRequest
2 голосов
/ 21 марта 2010

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

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

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

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

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

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

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

Спасибо

Ответы [ 2 ]

5 голосов
/ 21 марта 2010

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

4 голосов
/ 11 июня 2012

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

Решение 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. Как было предложено выше, токенизатор является предпочтительным способом.

...