问答详情
源自:3-5 使用正则表达式进行匹配

困惑求解答

<?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/';这样又可以实在是不懂了,求高手们指点

提问者:慕丝7168662 2017-12-06 15:21

个回答

  • 影_
    2017-12-22 17:17:04

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

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

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

  • 慕前端7539174
    2017-12-07 10:11:51

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