preg_last_error 函數用於執行一個正規表示式匹配。
文法
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
搜尋subject 與pattern 給定的正規表示式的一個符合。
參數說明:
$pattern: 要搜尋的模式,字串形式。
$subject: 輸入字串。
$matches: 如果提供了參數matches,它將被填入搜尋結果。 $matches[0]將包含完整模式匹配到的文本, $matches[1] 將包含第一個捕獲子組匹配到的文本,以此類推。
$flags:flags 可以被設定為以下標記值:
PREG_OFFSET_CAPTURE: 如果傳遞了這個標記,對於每一個出現的匹配返回時會附加字串偏移量(相對於目標字串的)。 注意:這會改變填充到matches參數的數組,使其每個元素成為由第0個元素是匹配到的字串,第1個元素是該匹配字串在目標字串subject中的偏移量。
offset: 通常,搜尋從目標字串的起始位置開始。可選參數offset 用於指定從目標字串的某個未知開始搜尋(單位是位元組)。
傳回值
傳回pattern 的符合次數。 它的值將是0 次(不匹配)或1 次,因為preg_match() 在第一次匹配後將會停止搜尋。 preg_match_all() 不同於此,它會一直搜尋subject 直到到達結尾。 如果發生錯誤preg_match()回傳FALSE。
實例
尋找文本字串"php":
<?php //模式分隔符號後的"i"標記這是一個大小寫不敏感的搜索if ( preg_match ( " /php/i " , " PHP is the web scripting language of choice. " ) ) { echo "查找到符合的字串php。 " ; } else { echo "未發現符合的字串php。 " ; } ?>執行結果如下圖所示:
查找到匹配的字串php。
查找單字"word"
<?php /*模式中的b標記一個單字邊界,所以只有獨立的單字"web"會被匹配,而不會匹配* 單字的部分內容例如"webbing" 或"cobweb" */ if ( preg_match ( " /bwebb/i " , " PHP is the web scripting language of choice. " ) ) { echo "查找到符合的字串。 n " ; } else { echo "未發現符合的字串。 n " ; } if ( preg_match ( " /bwebb/i " , " PHP is the website scripting language of choice. " ) ) { echo "查找到符合的字串。 n " ; } else { echo "未發現符合的字串。 n " ; } ?>執行結果如下圖所示:
查找到匹配的字串。未發現匹配的字串。
取得URL 中的域名
<?php //從URL取得主機名稱preg_match ( ' @^(?:http://)?([^/]+)@i ' , " http://www.codercto.com/index.html " , $matches ) ; $host = $matches [ 1 ] ; //取得主機名稱的後面兩部分preg_match ( ' /[^.]+.[^.]+$/ ' , $host , $matches ) ; echo " domain name is: {$matches[0]} n " ; ?>執行結果如下圖所示:
domain name is: codercto.com
使用命名子組
<?php $str = ' foobar: 2008 ' ; preg_match ( ' /(?P<name>w+): (?P<digit>d+)/ ' , $str , $matches ) ; /*下面範例在php 5.2. 2(pcre 7.0)或更新版本下工作, 然而, 為了後向兼容, 上面的方式是推薦寫法. */ // preg_match('/(?<name>w+): (?<digit>d+)/', $str, $matches); print_r ( $matches ) ; ?>執行結果如下圖所示:
Array( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008)