我碰到了一個奇怪的問題。看來我正在達到某種極限與preg_replace函數試圖使用PHP-5.3.3當使用兩個匹配項時,preg_match似乎達到極限
// works fine
$pattern_1 = '?START(.*)STOP?';
$string = 'START' . str_repeat('x',9999999) . 'STOP' ;
preg_match($pattern_1, $string , $matchedArray) ;
$pattern_2 = '?START-ONE(.*)STOP-ONE.*START-TWO(.*)STOP-TWO.*?';
// works fine
$string = 'START-ONE this is head stuff STOP-ONE START-TWO' . str_repeat('x', 49970) . 'STOP-TWO' ;
preg_match($pattern_2, $string , $matchedArray_2) ;
// didnt work
$string = 'START-ONE this is head stuff STOP-ONE START-TWO' . str_repeat('x', 49971) . 'STOP-TWO' ;
preg_match($pattern_2, $string , $matchedArray_3) ;
只有一個匹配的第一個選項使用一個非常大的字符串,也沒有問題,用了兩場比賽。
第二個選項的字符串長度爲50,026,並且正常工作。最後一個選項的字符串長度爲50027(多一個),匹配不再起作用。由於49971號碼在發生錯誤時可能會發生變化,因此可以將其更改爲更大的值以模擬問題。
任何想法或想法?也許這是一個PHP版本的問題?也許一個可能的解決方法是隻使用一個匹配而不是兩個,然後運行preg_match兩次?
您正在達到內存限制;嘗試在你的'PHP.ini'中增加它。 – 2015-01-09 20:07:57