您的位置:首页 > 编程语言 > PHP开发

鬼斧神工-正则表达式☞修正模式(进阶)

2017-05-08 13:12 363 查看

修正模式:

由于正则表达式匹配的目标字符串复杂多样,有些时候,同一个正则表达式匹配同一个字符串的时候存在匹配出两种或者是多种情况的可能,这就让匹配出现了歧义,修正模式就是为了解决这个问题而存在的。

下面我们来看两个比较重要的修正模式:

贪婪匹配:匹配结果存在歧义时取其长

在默认情况下,正则表达式采用的贪婪模式,也就是选用的最长的那个。

下面,我们来举个栗子:
<?php
$pattern = '/imooc.+123/';
$subject = 'I love imooc__123123123123123123';
//此时,__123可以作为.+的匹配结果,但是__123123也可以作为.+的匹配结果
//在默认情况下,采用的是贪婪模式,也就是选用最长的那个
$matches = array();
preg_match($pattern,$subject,$matches);
show($matches);

function show($var = null){
if(empty($var)){
echo 'null';
}
else if(is_array($var)||is_object($var)){
//array,object
echo '<pre>';
print_r($var);
echo '</pre>';
}
else{
//string ,int ,float...
echo $var;
}
}
?>





懒惰匹配:匹配结果存在歧义时取其短

如果要利用懒惰匹配,只需在正则表达式的结束符后面加上一个大写字母U即可。
<?php
$pattern = '/imooc.+123/U';
$subject = 'I love imooc__123123123123123123';
//此时,__123可以作为.+的匹配结果,但是__123123也可以作为.+的匹配结果
//在默认情况下,采用的是贪婪模式,也就是选用最长的那个
$matches = array();
preg_match($pattern,$subject,$matches);
show($matches);

function show($var = null){
if(empty($var)){
echo 'null';
}
else if(is_array($var)||is_object($var)){
//array,object
echo '<pre>';
print_r($var);
echo '</pre>';
}
else{
//string ,int ,float...
echo $var;
}
}
?>




常见的修正模式:

U 懒惰匹配
i 忽略英文字母大小写
x 忽略空白
s 让元字符' . ' 匹配包括换行符在内的所有字符
e

我们还可以既使用懒惰匹配,又忽略大小写。例如:'/iLoveYOu/Ui'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式 regex PHP