2011-05-15 13 views
1

我在ignore.txt中有一長串正則表達式,而在include.txt文件中有長列表。使用PHP對sample.html文件中包含的數據應用這些方法最快的方法是什麼?這樣可以捕獲在include中找到的任何匹配,但是那麼忽略ignore.txt中匹配的任何內容?在PHP中應用正則表達式列表

+0

preg_match和preg_replace接受數組作爲參數,以便您可以通過它們運行表達式列表。如何將文本文件轉換爲數組取決於您的txt文件的格式。 – dqhendricks 2011-05-16 02:01:24

回答

1

如果您include.txt和ignore.txt文件設置,使他們只有正則表達式,並有每行一個表達式,你可以使用PHP的file()函數。這會將文件加載到數組中,其中每一行都是數組中的一個元素。您可以使用file_get_contents()以字符串形式加載sample.html文件。

preg_match()preg_match_all()採取實際數組作爲輸入,像preg_replace()一樣。您將需要使用諸如foreach之類的東西來遍歷您的表達式數組,並將單個調用應用於其中一個匹配函數以獲得結果。

我認爲preg_match_all()將最適合您的需求,因爲它聽起來像是想將所有匹配拉出整個文件,而不僅僅是第一個。一旦你有完整的匹配列表,那麼你可以用類似的方式使用ignore.txt中的數據來應用你的過濾器。

+0

這就是我目前正在做的事情,但是想知道是否可能有一種我沒有想到的聰明方式,而不是循環遍歷每個文件中的每一行。謝謝 – Poe 2011-05-19 05:00:50

1

最快的方式是讓殼做的工作

$result = `cat sample.html | egrep -f include.txt | egrep -vf ignore.txt`; 
+0

這個答案有兩個問題:1.你不能真的假定這個人沒有使用Windows。他問了一個PHP解決方案。 – 2011-05-17 13:43:06