2016-07-27 14 views
0

でPHPファイルから関数名を取得する私は、ファイルtest.phpを持っている:これは私のコードであるpreg_match_all

public function editAction() { 
    //... 
} 

public function editGroupAction() { 
    //... 
} 

を:

$source = "test.php"; 
$fh = fopen($source,'r'); 
while ($line = fgets($fh)) { 
    preg_match_all('/function(.*?)Action()/', $line, $matches); 
    var_dump($matches); 
} 

私はActionで終わるの機能を取得したいですしかし、結果は空です。私はこのような結果を得るにはどうすればよい:

edit 
editGroup 
+1

に変更することを提案します。結果は空ではありません。こちらをご覧ください:https://eval.in/612829 ---編集:遅すぎると、@FirstOneは彼のニックネームに値すると推測します。 – roberto06

+0

質問について:あなたのコードが投稿したものと同じであることを確認してください。 – FirstOne

+1

出力の冒頭にまだスペースがあることに注意する価値はありますが、それもエスケープする必要があります。 – roberto06

答えて

2

あなたのコードは、このように単純化することができます。

$fileName = 'test.php'; 
$fileContent = file_get_contents($fileName); 
preg_match_all('/function(.*?)Action()/', $fileContent, $matches); 
$functions = $matches[1]; 

結果($functions ):

Array 
(
    [0] => edit 
    [1] => editGroup 
) 
いくつかの変更を使用してコードが続き



...

まず、何が発見された場合にはそうならば、配列にそれを追加し確認してください。ここでは作業コードは次のとおりです。

$source = "test.php"; 
$fh = fopen($source,'r'); 
$m = array(); 
while ($line = fgets($fh)) { 
    if(preg_match_all('/function(.*?)Action()/', $line, $matches)){ 
     $m[] = $matches[1][0]; 
    } 
} 

結果($m):

Array 
(
    [0] => edit 
    [1] => editGroup 
) 

preg_match_allので、完全なパターンの数がと一致し、あなたは何をしたかどうかを確認するためにリターンを使用することができ返し見つかりました。ヒットした場合は、希望の値を配列に追加して、後で取得することができます。いないすべての行が一致しますので、あなたは、いくつかの空の結果を得るた

;)


追記:述べたように、あなたは()空白に気づくstring(5) " edit"のようなものになってしまいます。私はpregを知らないので、私はあなたのためにそれを修正することはできません。私ができることは、$functions = array_map('trim', $matches[1]);

0

それはあなたが何をしたいのですが、あなたは正規表現で括弧をエスケープするかどうかわかりません。

だからここに若干の変更を使用してコードです:

<?php 
$content = "public function editAction() public function editGroupAction()"; 
preg_match_all('/function(.*?)Action\(\)/', $content, $matches); 
echo '<pre>'; 
var_dump($matches); 
echo '</pre>'; 

?> 

そして、はい、結果は空ではありません:)

+0

私の質問をもう一度編集しました –