關于正則匹配,preg_match()函數是如何運作的?
我先是寫了以下代碼,
<?php $subject?=?"[email protected]"; //在這里補充代碼,實現正則匹配,并輸出郵箱地址 $pattern='/\w+@\w+\.(com||cm)/'; preg_match($pattern,$subject,$match); //echo?$match[0]; print_r($match); 結果是: Array ( ????[0]?=>[email protected] ????[1]?=>?com ) 有兩個,第二個是com
然后我修改了一下正則表達式;代碼如下: <?php $subject?=?"[email protected]"; //在這里補充代碼,實現正則匹配,并輸出郵箱地址 $pattern='/\w+@\w+\.\w+/'; preg_match($pattern,$subject,$match); //echo?$match[0]; print_r($match); 結果是: Array ( ????[0]?=>[email protected] ) 就沒有[1]了。 為什么呢? 而且,我發現例子里的: $subject?=?"abcdef"; $pattern?=?'/a(.*?)d/'; preg_match($pattern,?$subject,?$matches); print_r($matches);?//結果為:Array?(?[0]?=>?abcd?[1]?=>?bc?) 例子里輸出的bc是abcd的中間兩個,而我第一個代碼輸出的com是郵箱的末尾。這是為什么?
2016-02-27
添加的圓括號相當于給要匹配的內容分組,preg_match()是把整體匹配和分組匹配的內容都輸出了
$subject?=?"[email protected]";
$pattern='/(\w+)@(\w+)\.(\w+)/';
你把正則改成這樣輸出下,我想你應該就明白了