2012-09-24 56 views
0

所以我使用的目錄迭代器來獲取所有PHP文件是這樣的:正則表達式包括一個字符串,但在相同的正則表達式沒有其他

$file_list = new RegexIterator($iterator_instance, '/^.+\.php$/'); 

現在$file_list含有.php擴展名的文件。但我想能夠得到所有的PHP文件,但跳過文件夾名稱查看但我不知道如何編寫這樣的正則表達式,因爲我不擅長它。

我只想得到所有.php文件,但不是從名爲的視圖


更新:

$dir_iterator = new RecursiveDirectoryIterator($path); 
$iterator = new RecursiveIteratorIterator($dir_iterator); 
$file_list = new RegexIterator($iterator, '/^.+\.php$/'); 
// foreach stuff now 

在這裏,我只是想從返回的文件/文件夾名稱,一個名爲意見應該被跳過,我也很喜歡,如果上述正則表達式可以修改爲文件夾也說明了這一點。

回答

3

你可以使用這個表達式:

'%^(?!.*[\\\\/]views?[\\\\/]).+\.php$%' 

說明:

^   # Start of string 
(?!  # Assert that it's impossible to match the following here: 
.*  # any number of characters 
[\\\\/] # a path delimiter (backslash or forward slash) 
views? # followed by view or views 
[\\\\/] # followed by a path delimiter 
)   # End of lookahead assertion 
.+  # Match one or more characters 
\.php  # Match .php 
$   # End of string 
+0

當我在我的問題中運行更新的代碼時,它不起作用。我仍然在它下面得到views文件夾和文件。 – Dev555

+0

在你原來的問題中,你想跳過的文件夾被命名爲'view',而不是'views'。如果你想要捕捉這兩者,可以在lookahead斷言中使用'/ views?/'。 –

+0

謝謝,但它返回視圖文件夾。一個例子:'admin \ views \ includes \ footer.php'。我想要所有的PHP文件,但不是從實際上我想要的視圖文件夾。 – Dev555

4

你可以使用一個CallbackFilterIterator(PHP 5.4)

// Assuming $file_list is based on a FilesystemIterator 
$iter = new CallbackFilterIterator($file_list, function($current) { 
    return strpos('/views/', $current->getReaPath()) === false; 
}); 

對於PHP 5.3:

class DirectoryFilter extends FilterIterator { 
    public function accept() { 
     $current = $this->getInnerIterator()->current(); 
     return strpos('/views/', $current->getReaPath()) === false; 
    } 
} 
$iter = new DirectoryFilter($file_list); 
+0

這不是我的問題!我知道。它是關於正則表達式和跳過文件夾命名**視圖**而使用'RegexIterator'例如正則表達式 – Dev555

+0

@ Dev555我確實錯誤地讀你的問題。我已經更新了我的答案。 – Petah

+0

感謝您的回答我最好尋找正則表達式解決方案。 +1雖然。 – Dev555

相關問題