最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

模板引擎正則表達(dá)式調(diào)試小技巧

 更新時(shí)間:2011年07月20日 22:57:14   作者:  
很久沒(méi)有遇上PHP難題了,這次正則問(wèn)題占了一點(diǎn)時(shí)間,還是老問(wèn)題最大回溯、遞歸限制問(wèn)題。學(xué)習(xí)透之后其實(shí)并不難修改調(diào)試有這類(lèi)問(wèn)題的正則。主要是以下幾點(diǎn)。
基于正則表達(dá)式替換的模板引擎很容易遇上正則表達(dá)式最大回溯/遞歸的限制。
惰性匹配并不可怕,正常情況下模板并不會(huì)不夠用,往往不會(huì)超出限制,discuz的模板引擎就大量使用了。但是因此而不去注意、不去學(xué)習(xí),則容易書(shū)寫(xiě)錯(cuò)誤并遇上問(wèn)題。
當(dāng)preg_*返回的是null的時(shí)候則要注意了,判斷函數(shù)是is_null.
出錯(cuò)并不可怕,但是最好把錯(cuò)誤都完整的輸出,這樣調(diào)試就很容易了。
除了輸出出錯(cuò)原因,還要輸出匹配的文本和使用的正則,這樣就很容易調(diào)試了。
PHP代碼
復(fù)制代碼 代碼如下:

<?php
if (is_null($tmp)){
$error_code = preg_last_error();
switch($error_code){
case PREG_NO_ERROR :
echo 'PREG_NO_ERROR';
break;
case PREG_INTERNAL_ERROR:
echo 'PREG_INTERNAL_ERROR';
break;
case PREG_BACKTRACK_LIMIT_ERROR:
echo 'PREG_BACKTRACK_LIMIT_ERROR';
break;
case PREG_RECURSION_LIMIT_ERROR:
echo 'PREG_RECURSION_LIMIT_ERROR';
break;
case PREG_BAD_UTF8_ERROR:
echo 'PREG_BAD_UTF8_ERROR';
break;
case PREG_BAD_UTF8_OFFSET_ERROR:
echo 'PREG_BAD_UTF8_OFFSET_ERROR';
break;
default:
echo 'UNKNOW ERROR';
}
exit;
}

參考資料
1、2010, Laruence 《深悉正則(pcre)最大回溯/遞歸限制》
2、2011, PHP中文手冊(cè) preg_last_error

相關(guān)文章

最新評(píng)論

平乡县| 石嘴山市| 洛南县| 合作市| 稻城县| 镇巴县| 瓮安县| 凌云县| 遵化市| 镇远县| 建阳市| 永康市| 隆德县| 五大连池市| 温州市| 新田县| 焉耆| 法库县| 永靖县| 电白县| 津市市| 祁连县| 安吉县| 余庆县| 岐山县| 尚义县| 保德县| 方正县| 西宁市| 吐鲁番市| 炎陵县| 依安县| 密山市| 南澳县| 离岛区| 三亚市| 黄梅县| 黔江区| 札达县| 壤塘县| 阿克陶县|