程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP 正則表達式匹配 preg

PHP 正則表達式匹配 preg

編輯:PHP基礎知識
 

PHP 應用中,正則表達式主要用於:

  • 正則匹配:根據正則表達式匹配相應的內容
  • 正則替換:根據正則表達式匹配內容並替換
  • 正則分割:根據正則表達式分割字符串

在 PHP 中有兩類正則表達式函數,一類是 Perl 兼容正則表達式函數,一類是 POSIX 擴展正則表達式函數。二者差別不大,而且推薦使用Perl 兼容正則表達式函數,因此下文都是以 Perl 兼容正則表達式函數為例子說明。

定界符

Perl 兼容模式的正則表達式函數,其正則表達式需要寫在定界符中。任何不是字母、數字或反斜線()的字符都可以作為定界符,通常我們使用 / 作為定界符。具體使用見下面的例子。

提示

盡管正則表達式功能非常強大,但如果用普通字符串處理函數能完成的,就盡量不要用正則表達式函數,因為正則表達式效率會低得多。關於普通字符串處理函數,請參見《PHP 字符串處理》。

preg_match()

preg_match() 函數用於進行正則表達式匹配,成功返回 1 ,否則返回 0 。

語法:

int preg_match( string pattern, string subject [, array matches ] )
參數說明: 參數 說明 pattern 正則表達式 subject 需要匹配檢索的對象 matches 可選,存儲匹配結果的數組, $matches[0] 將包含與整個模式匹配的文本,$matches[1] 將包含與第一個捕獲的括號中的子模式所匹配的文本,以此類推

例子 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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved