2010-06-11 48 views
3

這是preg_match我想用來查找文本文件中的特定文本。preg_match和長字符串

if (preg_match($regexp,$textFile,$result) > 0) { 
    echo "Found ".$result[0]; 
} else { 
    echo "Not found"; 
} 

但是,結果總是Found,沒有其他。結果數組是空的。現在我讀到preg_match無法使用長字符串。

我的文本文件大約是300KB,所以我估計有300000個字符。

我100%確定搜索到的字符串在文本文件中,事實上preg_match函數返回值大於0意味着它找到了它,但它沒有把它放到結果數組中。

所以我的問題是,我如何使它工作?

正則表達式將是/[specific text]\{(\d*)\}/所以,當然,我想能夠得到括號中的數字。

回答

9

你會很高興我發現這個問題。從PHP 5.2開始,他們引入了可以使用PCRE函數的文本大小限制,默認值爲100k。這並不壞。不好的部分是它如果大於,則默默地失敗。

解決方案?上限。初始化參數是pcre.backtrack_limit

+0

嘿,感謝您的回覆,但我認爲我做錯了什麼。我使用wampServer,我去了php.ini文件,並將pcre設置更改爲1百萬,重新啓動所有服務,但我仍然得到相同的結果:(只是普通的詞「Found」,沒有其他的東西 – user1651105 2010-06-11 09:02:27

+0

@aleluja在腳本中(在頂部)添加'error_reporting(E_ALL^E_STRICT);'並且再次嘗試它。此外,您可能想要發佈您的實際腳本以查看它是否可以被複制。 – cletus 2010-06-11 09:08:06

+0

我做了一件非常愚蠢的事情。你可以看到,在我的正則表達式中,我使用了「[」和「]」字符,我完全忘了它們是特殊的,我忘了逃避它們,因爲這兩個字符是我搜索的文本的一部分。現在我得到了我期待的結果。感謝您的幫助! – user1651105 2010-06-11 10:26:51