求大神解釋下為什么輸出是這樣的?
$p = '/\d+?\-\d+?/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0]; ?//結(jié)果為:010-1
$p = '/\d+?\-\d+?/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0]; ?//結(jié)果為:010-1
2015-04-28
舉報(bào)
2015-04-30
不好意思。重新回復(fù)一下。
這個(gè)例子中`\d+?` 是比較容易范迷糊的。后面的那組`\d+?`你已經(jīng)知道原因了。 我說一下前面的那組`\d+?`
當(dāng)正則開始匹配的時(shí)候,`\d+?`會(huì)最先匹配`我`,發(fā)現(xiàn)不對(duì),繼續(xù)匹配,直到匹配到字符串中的第一個(gè)0,發(fā)現(xiàn)對(duì)了。但這時(shí)候重點(diǎn)來了,如果0后面匹配到杠(-)以后,才滿足`\d+?\-` 這一段。但是0后面不是-,而是1.所以會(huì)重新匹配01,然后依然是上面那樣。直到匹配到010-的時(shí)候發(fā)現(xiàn)滿足`\d+?\-` ,那么它會(huì)繼續(xù)匹配剩下的正則表達(dá)式部分。后面的你也知道了。
這里關(guān)鍵點(diǎn)是那個(gè)杠(-)因?yàn)槟阒挥衅ヅ涞礁?-)的時(shí)候才滿足`\d+?\-`這段,即匹配結(jié)果是010- ?
2015-04-29
第二個(gè)\d 匹配到了1就結(jié)束了。因?yàn)槟莻€(gè)+表示1個(gè)或者多個(gè)。既然匹配到1了,就表示正則滿足,自然就結(jié)束后面的匹配了