正则匹配-非贪婪和贪婪

正则元字符里面有个符号问号符(?),这个符号有两种意思:

一种是:

匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。

另一种是:

当该字符紧跟在任何一个其他限制符 (*, +, ?, {n} , {n,}, {n,m})
后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串
“oooo”,‘o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。

举例说明:

'bank_card'=>[
    'key'=>'bank_card',
    'name'=>Yii::t('app','汉字1'),
    'option'=>[
        ['label'=>'input','desc'=>Yii::t('app','汉字2'),'placeholder'=>Yii::t('app','汉字3 中间有空格')],
        ['label'=>'input','desc'=>Yii::t('app','Bank Name'),'placeholder'=>Yii::t('app','PleaseEnterBankName')],
        ['label'=>'input','desc'=>Yii::t('app','BankBranch'),'placeholder'=>Yii::t('app','PleaseEnterBankBranch')],
        ['label'=>'input','desc'=>Yii::t('app','BankCardNo'),'placeholder'=>Yii::t('app','PleaseEnterBankCard')],]
],

现在要将Yii::t(‘aaa’,‘bbb’) 这样的部分替换成对应的bbb

最开始想到的正则是:

Yii::t\('app','(.*)'\)

结果匹配的结果如下:
在这里插入图片描述
蓝色部分为匹配到的结果,但是这个结果不对,他把一行同时有两个Yii::t()的部分当成了一个匹配,因为默认是贪婪模式,这个时候需要应用到非贪婪模式,修改正则如下:

Yii::t\('app','(.*?)'\)

相比上面的正则,是在*号后面加了?,综合文章开头对?好描述:尽可能少的匹配所搜索的字符串。
测试匹配如下:
在这里插入图片描述

上述两种,对比之下比较好理解

正则中用小括号括起来的部分就是我们用来替换的部分,在phpstorm或者sublime里面有正则匹配替换的功能
在这里插入图片描述

以上仅供记录,方便后面查看

正则教程:

https://www.runoob.com/regexp/regexp-tutorial.html
https://www.dazhuanlan.com/2020/04/01/5e84083c8c800/

正则匹配测试工具:

http://www.regexlab.com/zh/mtracer/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值