top
Loading...
談談php中的正則表達式

正則表達式無疑是perl,php等語言中最令人頭疼的東西。php中正則表達式與perl中有不同,這里寫出來,供大家參考
簡單解釋
script engine-microsoft vbscript/jscript的總稱,當前最新為5.5 beta 1
.除換行外的任意字符
+數量,1或更多
?數量,0或1
為了避免ubb代碼轉換,例子中的ubb標記的中括號使用全角

一、pattern要求嚴格
pattern中不能連續使用數量詞,如.+?,則不允許,同樣在script engine 5.0,5.1中也是如此。
但在perl和script engine 5.5 beta 1中不會錯誤,值得一提的是vbscript 5.5中必須要如此使用才會解釋正確?而正式版本的ubb也使用了.+?這樣的表述.在php中,由于不允許使用連續數量詞,如果用.+的話,所以無法用正則表達式解釋.
[b]test1[/b][b]test2[/b]而是解釋成test1[/b][b]test2
這個問題可以通過使用php3_pcre.dll來解決


二、子匹配
在使用regexp中往往使用()來描述子匹配,perl,script engine 5.5中用$1'$9或1'9來描述,在php中使用'9(在表
達式中需要用'9)之類的進行描述表示被搜索的字符串,如替換ubb標記中的黑體
$str="[b]這是黑體[/b]";
$str=eregi_replace("[b](.+)[/b]","1",$str);

三、像preg_replace等函數是由哪個dll提供?
Perl 相容語法函式庫
preg_match
preg_split
preg_replace
preg_match_all

這些由php3_pcre.dll提供,通過php3_pcre.dll,我們可以用perl兼容的語法進行工作,同時也能解決以上的問題。
例子
dl("php3_pcre.dll");
$Text="[b]黑體1[/b][b]黑體2[/b]";
echo preg_replace("/[b](.+?)[/b]/is","1",$Text);
?>
結果顯示為黑體1黑體2
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗