正则元字符里面有个符号问号符(?),这个符号有两种意思:
一种是:
匹配前面的子表达式零次或一次。例如,“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/