關于?的作用
$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
舉報
2015-11-04
簡單點:/a*/ 匹配 字符串'aaaaaa' 全部匹配; /a*?/匹配 字符口串 'aaa',結果為空
*出現(xiàn)盡可能多的次數(shù), ?出現(xiàn)0次或一次
*?匹配盡可能少的次數(shù),即有可能盡量無需匹配。
正則?用法
當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串
preg_match()非全局匹配的情況下,只匹配一次。正則中的子模式會依次在返回的數(shù)組索引1的位置開始出現(xiàn)。
分析正則(.*?)
匹配除\n之外的任意單個字符(.),任意次(*),匹配盡可能少(? 0次或1次)。簡單點: 匹配任意字符。
所以正則' /a(.*?)d/? 可以匹配字符串'ad','add','aadd'
因為非全局匹配,故用它使用pre_match匹配出來的數(shù)組第1個元素分別是,ad,ad,aad,
又由于有子模式(正則中的括號),所以第二個元素值 空,空,a,
不加?則匹配盡可能多。