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

关于?的作用

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

正在回答

1 回答

简单点:/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,

不加?则匹配尽可能多。

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

qq_恩_0

meikandong
2015-12-19 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

关于?的作用

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