preg_match正則匹配的字符串中會出現一些問題,下面我來給大家介紹一下怎麼來解決長字符串時出現錯誤觀點的解決辦法。
例
preg_match_all正則匹配字符串所有連接地址
代碼如下 復制代碼$str ='<a href="http://www.a.com/2010/11-15/5.html">4</a>
<a href="http://www.b.com/2010/11-15/6.html">5</a>
<a href="http://www.b.com/2010/11-15/1.html">6</a>
';
$ymd=date("y")."/".date("m-d");
$b = preg_match_all('/<a href="(.*?)com/'.$ymd.'(.*?)html">(.*?)</a>/',$a,$c,preg_set_order);
但是用preg_match正則提取目標內容,死活有問題,
代碼測得死去活來。
後來發現“pcre.backtrack_limit ”的值默認只設了100000。
解決辦法:
代碼如下 復制代碼
ini_set(‘pcre.backtrack_limit’, 999999999);
注:這個參數在php 5.2.0版本之後可用。
另外說說關於:pcre.recursion_limit
pcre.recursion_limit是PCRE的遞歸限制,這個項如果設很大的值,會消耗所有進程的可用堆棧,最後導致PHP崩潰。
也可以通過修改配置來限制
ini_set(‘pcre.recursion_limit’, 99999);
實際項目應用中,最好也對內存進行限定設置:
代碼如下 復制代碼ini_set(‘memory_limit’, ’64M’);