正则表达式无疑是perl,php等语言中最令人头疼的东西。php中正则表达式与perl中有
不同,这里写出来,供大家参考
简单解释
script engine-microsoft vbscript/jscript的总称,当前最新为5.5 beta 1
.除换行外的任意字符
+数量,1或更多
?数量,0或1
为了避免ubb代码转换,例子中的ubb标记的中括号使用全角
一、pattern要求严格
pattern中不能连续使用数量词,如.+?,则不允许
但在perl和script engine 5.5 beta 1中不会错误,值得一提的是vbscript 5.5中必须
要如此使用才会解释正确?而正式版本的ubb也使用了.+?这样的表述
在php中,由于不允许使用连续数量词,如果用.+的话,所以无法用正则表达式解释
[b]test1[/b][b]test2[/b]而是解释成
btest1[/b]test2/b
这个问题可以通过使用php3_pcre.dll来解决
二、子匹配
在使用regexp中往往使用()来描述子匹配,perl,script engine 5.5中用$1~$9或1~9
来描述,在php中使用~9(在表达式中需要用\0~\9)之类的进行描述
表示被搜索的字符串
如替换ubb标记中的黑体
$str="[b]这是黑体[/b]";
$str=eregi_replace("[b](.+)","b\1/b",$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("/(.+?)/is","b\1/b",$Text);
?>
结果显示为b黑体1/bb黑体2/b