php 正则多行匹配问题

2009年4月30日星期四

php 正则多行匹配问题

js的正则多行匹配似乎是默认的。
php则不然,几次碰到需要多行匹配时,都没有合理解决。
一直以为是增加修正符m来匹配多行,但需要条件,必须制定^$才可以。
使用[.\n\r\s]*也未能匹配出多行来,郁闷。
后来询问李鹏,才知道s这个修正符号这么NB。
例子:
$a=html
divclass=blkContainerSblkConid=artibody
!播放器begin

script

/script
.
!播放器end
!播放器end
/div
html;
$regex=/(!\s*播放器\s*begin\s*)(.*)(\!\s*播放器\s*end\s*)/is;
//非贪婪匹配使用(.*?)
$replace=;
$subject=$a;
$subject=preg_replace($regex,$replace,$subject);
echo$subject;
?
输出:
divclass=blkContainerSblkConid=artibody
/div
以下是php手册对修正符号s和m的描述
s(PCRE_DOTALL)
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和Perl的/s修正符是等效的。排除字符类例如[^a]总是匹配换行符的,无论是否设定了此修正符。
m(PCRE_MULTILINE)

0 评论:

发表评论