困惑求解答

来源:3-5 使用正则表达式进行匹配

慕丝7168662

2017-12-06 15:21

<?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回答

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

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

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

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

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

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

    慕丝7168...

    你去看下正则的三种模式吧

    2017-12-20 23:16:02

    共 1 条回复 >

PHP进阶篇

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

181728 学习 · 2575 问题

查看课程

相似问题