首頁 >後端開發 >php教程 >php:preg_match與preg_match_all用法實例比較

php:preg_match與preg_match_all用法實例比較

伊谢尔伦
伊谢尔伦原創
2017-06-24 15:35:331809瀏覽

正規表示式在PHP 中的應用

#在PHP 應用程式中,正規表示式主要用於:
•正規符合:根據正規表示式符合對應的內容
•正規取代:根據正規表示式來配對內容並取代
•正規分割:依正規表示式分割字串
##字串

字串
##在PHP 中有兩類正規表示式函數,一類是Perl 相容正規表示式函數,一類是POSIX 擴充正規表示式函數。二者差異不大,而且建議使用Perl 相容正規表示式函數,因此下文都是以 Perl 相容正規表示式函數為範例說明。
定界符
Perl 相容模式的正規表示式函數,其正規表示式需要寫在定界符中。任何不是字母、數字或反斜線()的字元都可以作為定界符,通常我們使用 / 作為定界符。具體使用請見下面的例子。
提示

儘管正規表示式功能非常強大,但如果用普通字串處理函數能完成的,就盡量不要用正規表示式函數,因為正規表示式效率會低得多。關於普通字串處理函數。
preg_match()
preg_match() 函數用於進行正規表示式匹配,成功返回 1 ,否則返回 0 。

語法:

int preg_match( string pattern, string subject [, array matches ] )

#參數說明: 參數#patternsubject可選,儲存符合結果的數組
說明
正規表示式
需要符合檢索的物件 #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.php.cn/index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

瀏覽器輸出:

##網域為:php.cn



preg_match_all()
preg_match_all() 函數用於進行正規表示式全域匹配,成功返回整個模式匹配的次數(可能為零),如果出錯返回FALSE 。

語法:
int preg_match_all( string pattern, string subject, array matches [, int flags ] )

參數說​​明:參數說明#pattern正規表示式subject需要符合檢索的物件matches儲存符合結果的陣列

flags

  1. 可選,指定匹配結果放入matches 中的順序,可供選擇的標記有:

  2. PREG_PATTERN_ORDER:默認,對結果排序使$matches[0] 為全部模式匹配的數組,$matches[1] 為第一個括號中的子模式所匹配的字串組成的數組,以此類推

  3. PREG_SET_ORDER:對結果排序使$matches[0] 為第一組匹配項的數組,$matches[1] 為第二組匹配項的數組,以此類推

PREG_OFFSET_CAPTURE:如果設定本標記,對每個出現的匹配結果也同時傳回其附屬的字串偏移量


##下面的範例示範了將文字中所有e03b848252eb9375d56be284e690e873bc5574f69a0cba105bc93bd3dc13c4ec 標籤內的關鍵字(php)顯示為紅色。


<?php
$str = "<pre class="brush:php;toolbar:false">学习php是一件快乐的事。
所有的phper需要共同努力!
"; $kw = "php"; preg_match_all('/
([sS]*?)
/',$str,$mat); for($i=0;$i'.$kw.'', $mat[0][$i]); $str = str_replace($mat[1][$i], $mat[0][$i], $str); } echo $str; ?>
正則符合中文漢字
正規符合中文漢字依頁面編碼不同而略有差異:

•GBK/GB2312編碼:[x80-xff>]+ 或[xa1-xff]+
•UTF-8編碼:[x{4e00}-x{9fa5}]+/u

#範例:

<?php
$str = "学习php是一件快乐的事。";
preg_match_all("/[x80-xff]+/", $str, $match);
//UTF-8 使用:
//preg_match_all("/[x{4e00}-x{9fa5}]+/u", $str, $match);
print_r($match);
?>

輸出:


Array
(
    [0] => Array
        (
            [0] => 学习
            [1] => 是一件快乐的事。
        )
)

######

以上是php:preg_match與preg_match_all用法實例比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn