在 PHP 應用中,正則表達式主要用於:
在 PHP 中有兩類正則表達式函數,一類是 Perl 兼容正則表達式函數,一類是 POSIX 擴展正則表達式函數。二者差別不大,而且推薦使用Perl 兼容正則表達式函數,因此下文都是以 Perl 兼容正則表達式函數為例子說明。
Perl 兼容模式的正則表達式函數,其正則表達式需要寫在定界符中。任何不是字母、數字或反斜線()的字符都可以作為定界符,通常我們使用 / 作為定界符。具體使用見下面的例子。
盡管正則表達式功能非常強大,但如果用普通字符串處理函數能完成的,就盡量不要用正則表達式函數,因為正則表達式效率會低得多。關於普通字符串處理函數,請參見《PHP 字符串處理》。
preg_match() 函數用於進行正則表達式匹配,成功返回 1 ,否則返回 0 。
語法:
int preg_match( string pattern, string subject [, array matches ] )
例子 1 :
<?php if(preg_match("/php/i", "PHP is the web scripting language of choice.", $matches)){ print "A match was found:". $matches[0]; } else { print "A match was not found."; } ?>
浏覽器輸出:
A match was found: PHP
在該例子中,由於使用了 i 修正符,因此會不區分大小寫去文本中匹配 php 。
preg_match() 第一次匹配成功後就會停止匹配,如果要實現全部結果的匹配,即搜索到subject結尾處,則需使用 preg_match_all() 函數。
例子 2 ,從一個 URL 中取得主機域名 :
<?php // 從 URL 中取得主機名 preg_match("/^(http://)?([^/]+)/i","http://www.5idev.com/index.html", $matches); $host = $matches[2]; // 從主機名中取得後面兩段 preg_match("/[^./]+.[^./]+$/", $host, $matches); echo "域名為:{$matches[0]}"; ?>
學習備注:
^(http://)?([^/]+ 在php中是不對的,應該寫成
^(http://)?([^/]+ ,同時為了能識別https,將正則表達式寫為:$preg = "/^((http://)|(https://))?([^/]+)/"
更改後的代碼如下:
$preg = "/^((http://)|(https://))?([^/]+)/"; $str = "http://www.baidu.com/index.htm"; preg_match($preg,$str,$matches); //var_dump($matches); $host = $matches[4]; preg_match("/[^./]+.[^./]+$/i",$host,$matches); echo $matches[0]; //var_dump($matches)
浏覽器輸出:
域名為:baidu.com