在PHP編程中,正則表達(dá)式是非常重要的一個組成部分,可以使用PHP內(nèi)置的preg函數(shù)來支持正則表達(dá)式的操作,其中的preg_group函數(shù)尤其重要。所謂preg_group,就是從匹配的結(jié)果中獲取特定的分組信息。
在正則表達(dá)式中,使用圓括號()來表示分組,每一個分組都可以用preg_group函數(shù)來獲取其匹配的結(jié)果。例如:
$str = "apple,pear,orange"; preg_match('/(\w+),(\w+),(\w+)/',$str,$match); print_r($match);
輸出的結(jié)果如下:
Array ( [0] => apple,pear,orange [1] => apple [2] => pear [3] => orange )
我們可以看到,preg_match函數(shù)的返回結(jié)果是一個數(shù)組,其中包含了匹配到的所有字符串及其對應(yīng)的分組結(jié)果。
除了可以使用數(shù)組下標(biāo)來訪問分組結(jié)果外,也可以使用preg_group函數(shù)來獲取相應(yīng)的分組結(jié)果。例如:
echo preg_group(1,$match); //輸出"apple" echo preg_group(2,$match); //輸出"pear" echo preg_group(3,$match); //輸出"orange"
在實(shí)際的編程中,preg_group函數(shù)通常用于對匹配結(jié)果的特定分組進(jìn)行進(jìn)一步的處理,例如:
$str = "2012-08-01 12:34:56"; preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/',$str,$match); $year = preg_group(1,$match); $month = preg_group(2,$match); $day = preg_group(3,$match); $hour = preg_group(4,$match); $minute = preg_group(5,$match); $second = preg_group(6,$match); echo "{$year}年{$month}月{$day}日 {$hour}時{$minute}分{$second}秒"; //輸出"2012年08月01日 12時34分56秒"
上述代碼使用正則表達(dá)式提取了一個日期時間字符串中的年、月、日、時、分、秒等信息,并使用preg_group函數(shù)分別獲取這些信息,最后將其以人類可讀的方式輸出。
有時候,正則表達(dá)式中可能會涉及到多個分組,需要同時獲取它們的匹配結(jié)果。preg_match_all函數(shù)可以同時取得所有匹配結(jié)果,并返回一個二維數(shù)組。
$str = "apple,pear,orange,banana,watermelon"; preg_match_all('/(\w+)/',$str,$match); print_r($match);
輸出的結(jié)果如下:
Array ( [0] => Array ( [0] => apple [1] => pear [2] => orange [3] => banana [4] => watermelon ) [1] => Array ( [0] => apple [1] => pear [2] => orange [3] => banana [4] => watermelon ) )
上述代碼中,使用preg_match_all函數(shù)獲取一個字符串中的所有單詞(即由字母、數(shù)字、下劃線組成的字符串),并將結(jié)果保存到一個二維數(shù)組中。其中,第一維數(shù)組包含了所有的匹配字符串,第二維數(shù)組是每個匹配字符串對應(yīng)的所有分組信息。
可以使用preg_group函數(shù)來獲取任意一個匹配結(jié)果中特定分組序號的數(shù)據(jù),例如:
echo preg_group(1,$match[0]); //輸出"apple" echo preg_group(1,$match[1]); //輸出"apple" echo preg_group(2,$match[1]); //輸出"pear" echo preg_group(1,$match[0][3]); //輸出"banana"
總之,preg_group函數(shù)是正則表達(dá)式在PHP編程中的一個非常重要的應(yīng)用,可以方便地獲取匹配結(jié)果中的特定分組序號數(shù)據(jù),為實(shí)現(xiàn)各類高級字符串處理提供了強(qiáng)有力的支持。