利用 preg_match(),我們可以完成字串的規則匹配。如果找到一個匹配,preg_match() 函數返回 1,否則返回 0。還有一個可選的第三參數可以讓你把匹配的部分存在一個數組中。在驗證資料時這個功能可以變得非常有用。
| 代碼如下 |
複製代碼 |
// 模式定界符後面的 "i" 表示不區分大小寫字母的搜尋 if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } ?> |
取得目前時間
| 代碼如下 |
複製代碼 |
//需要匹配的字串。date函數返回目前時間。 "現在時刻:2012-04-20 07:31 am" $content = "現在時刻:".date("Y-m-d h:i a"); //匹配日期和時間. if (preg_match ("/d{4}-d{2}-d{2} d{2}:d{2} [ap]m/", $content, $m)) { echo "匹配的時間是:" .$m[0]. "n"; //"2012-04-20 07:31 am" } //分別取得日期和時間 if (preg_match ("/([d-]{10}) ([d:]{5} [ap]m)/", $content, $m)) { echo "當前日期是:" .$m[1]. "n"; //"2012-04-20" echo "目前時間是:" .$m[2]. "n"; //"07:31 am" } ?> |
這個例子將驗證出此 Email 地址為正確格式。現在讓我們來看看這段Regex所代表的各種規則。
擷取Google首頁title
比如說要擷取google首頁的title內容,代碼如下:
| 代碼如下 |
複製代碼 |
$str = file_get_contents('http://www.google.com'); preg_match('/(.*)/', $str, $arr); echo $arr[1]; ?> |
從網址擷取網域名稱
| 代碼如下 |
複製代碼 |
preg_match("/^(http://)?([^/]+)/i", "http://www.bKjia.c0m/index.html", $matches); $host = $matches[2]; // 從主機名稱中取得後面兩段 preg_match("/[^./]+.[^./]+$/", $host, $matches); echo "domain name is: {$matches[0]}n"; ?> |
preg_match($pattern,$string,$matcher)其中$pattern對應的就是/^(http://)?([^/]+)/i,$string 是http://www.php.net/index.html,$match是匹配到的結果。
如果提供了 matches,則其會被搜尋的結果所填充。$matches[0] 將包含與整個模式比對的文本,$matches[1] 將包含與第一個捕獲的括弧中的子模式所匹配的文本,以此類推。
$matches[0] 將包含與整個模式比對的文本。咱們用pring_r列印出來第一個$matches:
| 代碼如下 |
複製代碼 |
Array ( [0] => http://www.bKjia.c0m [1] => http:// [2] => www.bKjia.c0m ) |
$matches[0] 將包含與整個模式比對的文本,$matches[1] 將包含與第一個捕獲的括弧中的子模式所匹配的文本。在正則中,()代表模式:匹配 pattern 並擷取這一匹配。所擷取的匹配可以從產生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0…$9 屬性。就是說數組中下標為1的值就是正則中/^(http://)?([^/]+)/i第一個()裡的值!數組下標2的值以此類推。
http://www.bkjia.com/PHPjc/628982.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628982.htmlTechArticle利用 preg_match(),我們可以完成字串的規則匹配。如果找到一個匹配,preg_match() 函數返回 1,否則返回 0。還有一個可選的第三參數可以讓...