2016-07-27 53 views
0

我有一個文件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

我又編輯了我的問題 –