关于?的作用

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

fangshuiyu

2015-10-16 15:31

$subject = "abcbddef"; $pattern = '/a(.*?)d/'; preg_match($pattern, $subject, $matches); print_r($matches); 代码修改为如上,应该更好理解?的作用,输出结果为: Array ( [0] => abcbd [1] => bcb ) 如果不加问号,则结果为: Array ( [0] => abcbdd [1] => bcbd )

写回答 关注

1回答

  • pardon110
    2015-11-04 15:14:30

    简单点:/a*/ 匹配 字符串'aaaaaa' 全部匹配; /a*?/匹配 字符口串 'aaa',结果为空

    *出现尽可能多的次数, ?出现0次或一次

    *?匹配尽可能少的次数,即有可能尽量无需匹配。

    正则?用法

    当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串

    preg_match()非全局匹配的情况下,只匹配一次。正则中的子模式会依次在返回的数组索引1的位置开始出现。

    分析正则(.*?)

    匹配除\n之外的任意单个字符(.),任意次(*),匹配尽可能少(? 0次或1次)。简单点: 匹配任意字符。

    所以正则' /a(.*?)d/  可以匹配字符串'ad','add','aadd'

    因为非全局匹配,故用它使用pre_match匹配出来的数组第1个元素分别是,ad,ad,aad,

    又由于有子模式(正则中的括号),所以第二个元素值 空,空,a,

    不加?则匹配尽可能多。

    qq_恩_0

    meikandong

    2015-12-19 20:10:33

    共 1 条回复 >

PHP进阶篇

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

181839 学习 · 2577 问题

查看课程

相似问题