贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配。
$str = '{{a}}{{b}}';
preg_match('/{{.*}}/',$str,$match);
print_r($match);//Array ( [0] => {{a}}{{b}} )

非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配。
$str = '{{a}}{{b}}’;
preg_match('/{{.*?}}/',$str,$match);
print_r($match);//Array ( [0] => {{a}} )


几个常用的非贪婪匹配Pattern
*?     重复任意次,但尽可能少重复
+?     重复1次或更多次,但尽可能少重复
??     重复0次或1次,但尽可能少重复
{n,m}?     重复n到m次,但尽可能少重复
{n,}?     重复n次以上,但尽可能少重复


Yii2中Schema.php中使用的例子:

preg_replace('/\\{\\{(.*?)\\}\\}/', '\1', $name);

在php中,单引号只能转义反斜杠(\)和单引号(’)。如果要在单引号中写反斜杠(\),就写成(\\)最稳妥。
在正则表达式中大括号({)是需要被转义的,所以要用反斜杠。

如上就解释了,为什么写成\\{。



<<<<<<<<2016年2月5日
preg_match()函数,
如果正则表达式在“字符串”中有对应的匹配,那么就会写入match数组中。比如^123在“123123”中是可以匹配字符串中的123的,那么match就是有值的。
当match有值,函数返回1。当match无值,函数返回0。

$a = preg_match('/^123/','123123',$b);
var_dump($a,$b);//int(1) array(1) { [0]=> string(3) "123" }
preg_match('/^.*?123/','123123',$b);
print_r($b);die;//Array ( [0] => 123 )

preg_match('/^.*123/','123123',$b);
print_r($b);die;//Array ( [0] => 123123 )
>>>>>>>>>>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值