您的位置:首页 > 其它

二:字符串和正则表达式_正则表达式的模式修正符

2011-01-02 13:10 363 查看
正则表达式的模式修正符

模式修正符是为正则表达式增强和补充的一个功能,使用在正则之外.
格式:/ 正则 / 模式修正符常用模式修正符有:
i 正则内容在匹配时候不区分大小写(默认是区分的)
m 在匹配首内容或者尾内容时候采用多行识别匹配
s 将转义回车/n取消是为单行匹配如.
x 忽略正则中的空白
A 强制从头开始匹配
D 强制$匹配尾部无任何内容包括/n
U 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束,常用在采集程序上的正则表达式

/正则/i 实例如下
<?php
$mode = "/aaa/";
$string = "AaA";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配失败!
加上模式修正符i后
<?php
$mode = "/aaa/i";
$string = "AaA";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配成功:AaA

/正则/m 实例如下
<?php
$mode = "/^aaa/";
$string = "AaA/naaabbb";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配失败!
加上模式修正符m后
<?php
$mode = "/^aaa/m";
$string = "AaA/naaabbb";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配成功:aaa

/正则/s 实例如下
<?php
$mode = "/444(.*)222/";
$string = "444erw/n234222";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配失败! //由于.是不括/n换行符的任何字符,所以匹配失败了
加上模式修正符s后
<?php
$mode = "/444(.*)222/s";
$string = "444erw/n234222";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配成功:444erw 234222 //由于模式修正符su将/n换行符忽略掉换成了空格,所以匹配成功

/正则/x 实例如下
<?php
$mode = "/(/d)//1 3/";
$string = "44222443";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配失败!
加上模式修正符x后
<?php
$mode = "/(/d)//1 3/x"; //模式修正符将1与3之间的空格去除并且先算//1再看数字3
$string = "44222443";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配成功:443

/正则/A 实例如下
<?php
$mode = "/^aaa/m";
$string = "AaA/naaabbb";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配成功:aaa
加上模式修正符A后
<?php
$mode = "/^aaa/mA"; //模式修正符A强制从头开始匹配,这使行模式修正符m多行匹配失去作用
$string = "AaA/naaabbb";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配失败!

/正则/D 实例如下
<?php
$mode = "/321$/";
$string = "AaA/naaabbb321/n";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配成功:321
加上模式修正符D后
<?php
$mode = "/321$/D"; //D 强制$匹配尾部无任何内容包括不能有/n
$string = "AaA/naaabbb321/n";
if(preg_match($mode,$string,$arr))
echo "匹配成功:"."<font color=red >$arr[0]</font>";
else
echo "匹配失败!";
?>
运行结果:匹配失败!";

/正则/U 实例如下
<?php
$mode = "/<(.+)>/";
$string = "sfew<3432>sdds<42423>ffdsf";
if(preg_match($mode,$string,$arr))
echo $arr[0];
else
echo "匹配失败!";
?>
运行结果:<3432>sdds<42423> //这时因为正则表达式在匹配时默认情况下是贪婪匹配
加上模式修正符U后
<?php
$mode = "/<(.+)>/U";
$string = "sfew<3432>sdds<42423>ffdsf";
if(preg_match($mode,$string,$arr))
echo $arr[0];
else
echo "匹配失败!";
?>
运行结果:<3432> //加上模式修正符U后禁止贪婪匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: