为了账号安全,请及时绑定邮箱和手机立即绑定

困惑求解答

<?php

$subject = "abdef";

$pattern = '/a(.?*)d/';

preg_match($pattern, $subject, $matches);

print_r($matches);

请问$pattern = '/a(.*?)d/';能匹配为什么$pattern = '/a(.?*)d/';就匹配不了呢?

当ad之间只有一个b时?可以匹配到b然后*是匹配0或者1次那他不匹配不就可以了???

而$pattern = '/a(.?.*)d/';这样又可以实在是不懂了,求高手们指点

正在回答

2 回答

.*? 中 .表示匹配任意字符(除换行符),*表示0或多次,合在一起就是匹配全字符,而?(0或1次) 则是非贪婪匹配,他一找到符合的就匹配。比如说abdeedf 他匹配的是abd 而不是abdeed 因为是懒惰模式

而.?* .?本来就是0或一次了 你加个*还不如直接.*呢。。而且这样好像会出错,具体我也不懂。

.?.*就很明显了 .?是0或1次,.*是0或多次 可以匹配

0 回复 有任何疑惑可以回复我~

高手都不会来看教程了,都出师了,希望有老师能看到吧,正则比较复杂,我反正一直就没有搞懂过

0 回复 有任何疑惑可以回复我~
#1

慕丝7168662 提问者

你去看下正则的三种模式吧
2017-12-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181826    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

困惑求解答

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信