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

修正模式

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

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

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

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

下面,我们来举个栗子:
<?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'




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值