首页 > 其他 > 详细

模式修饰符

时间:2014-07-08 18:41:04      阅读:371      评论:0      收藏:0      [点我收藏+]

s: 点号通配模式


文本文件string

i'm liuyibao.
i'm 25.


PHP代码

$str = file_get_contents('./string');echo $str;
if(preg_match('/.*/s', $str, $matches)){
    print_r($matches);
}

运行结果

i'm liuyibao. i'm 25.
Array ( [0] => i'm liuyibao. i'm 25. ) 

由此可以看出点号通配模式可以匹配换行符。


假如PHP代码是这样的,即去掉模式修饰符s

$str = file_get_contents('./string');echo $str;
if(preg_match('/.*/', $str, $matches)){
    print_r($matches);
}

运行结果如下,即不能匹配换行符及之后的字符串

i'm liuyibao. i'm 25.
Array ( [0] => i'm liuyibao. ) 

转自 ‘精通正则表达式P119’: 如果所使用的工具能够在多行文本中进行搜索,请务必注意点号,它在通常情况下不能匹配换行符. P111有详细点号通配模式的介绍


m : 增强的行锚点模式


文本文件string同上,PHP代码如下:

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^/', '###', $str);
echo $str2;

运行结果如下:

i'm liuyibao. i'm 25.
###i'm liuyibao. i'm 25.

可见只有行首的起始被替换为###


PHP代码改成增强的行锚点模式,如下

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^/m', '###', $str);
echo $str2;

运行结果如下:

i'm liuyibao. i'm 25.
###i'm liuyibao. ###i'm 25.

可见文本内所有的行起始位置都被替换为###


下面将string改为如下,即增加了一个空行:

i'm liuyibao.

i'm 25.

PHP代码改为如下,即将空行替换为###:

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^$/', '###', $str);
echo $str2;

运行结果如下,即没能替换:

i'm liuyibao. i'm 25.
i'm liuyibao. i'm 25.

改为增强模式:

$str = file_get_contents('./string');
echo $str.'<br/>';
$str2 = preg_replace('/^$/m', '###', $str);
echo $str2;

运行结果如下,成功替换:

i'm liuyibao. i'm 25.
i'm liuyibao. ### i'm 25.

转自: ‘精通正则表达式‘ P112,通常情况下,锚点^不能匹配字符串内部的换行符,而只能匹配目标字符串的起始位置。但是在增强模式下,它能够匹配字符串内嵌的文本行的开头位置,$也是如此

支持此模式的程序通常还提供了 \A 和 \Z , 它们的作用与普通的 ^ 和 $ 一样,只是在此模式下它们的意义不会发生变化。也就是说 \A 和 \Z 永远不会匹配字符串内部的换行符。


模式修饰符,布布扣,bubuko.com

模式修饰符

原文:http://blog.csdn.net/dabao1989/article/details/37316979

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!