質問

私は、PHPのソースコードから抽出機能にPHPの正規表現を作成しようとしています。今まで、私は} {の間エキスすべてに再帰的な正規表現を使用しますが、それはまた、if文のようなものと一致しました。私はのようなものを使用する場合:

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

これ以上の1つの機能は、ファイル内に存在するとき(それはあまりにも再帰に「関数」の部分を使用して、おそらくため)仕事をしません。

これを行うにはどのような方法は?あります。

サンプルファイル:

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

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

おかげ

役に立ちましたか?

解決

正規表現は、それを行うには間違った方法です。考えてみましょうトークナイザのか<のhref = "http://php.net /manual/en/book.reflection.php」REL = "noreferrer">反射する

他のヒント

PHP、正規表現と新しい行する >

正規表現解決策ます:

$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