关于?的作用
$subject = "abcbddef"; $pattern = '/a(.*?)d/'; preg_match($pattern, $subject, $matches); print_r($matches); 代码修改为如上,应该更好理解?的作用,输出结果为: Array ( [0] => abcbd [1] => bcb ) 如果不加问号,则结果为: Array ( [0] => abcbdd [1] => bcbd )
$subject = "abcbddef"; $pattern = '/a(.*?)d/'; preg_match($pattern, $subject, $matches); print_r($matches); 代码修改为如上,应该更好理解?的作用,输出结果为: Array ( [0] => abcbd [1] => bcb ) 如果不加问号,则结果为: Array ( [0] => abcbdd [1] => bcbd )
2015-10-16
简单点:/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,
不加?则匹配尽可能多。
举报