熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php小經驗:解析preg

2013-11-15 12:35:20  來源: PHP編程 

  正則表達式在 PHP 中的應用
在 PHP 應用中正則表達式主要用於
•正則匹配根據正則表達式匹配相應的內容
•正則替換根據正則表達式匹配內容並替換
•正則分割根據正則表達式分割字符串
在 PHP 中有兩類正則表達式函數一類是 Perl 兼容正則表達式函數一類是 POSIX 擴展正則表達式函數二者差別不大而且推薦使用Perl 兼容正則表達式函數因此下文都是以 Perl 兼容正則表達式函數為例子說明
定界符
Perl 兼容模式的正則表達式函數其正則表達式需要寫在定界符中任何不是字母數字或反斜線()的字符都可以作為定界符通常我們使用 / 作為定界符具體使用見下面的例子
提示
盡管正則表達式功能非常強大但如果用普通字符串處理函數能完成的就盡量不要用正則表達式函數因為正則表達式效率會低得多關於普通字符串處理函數
preg_match()
preg_match() 函數用於進行正則表達式匹配成功返回 否則返回
語法
int preg_match( string pattern string subject [ array matches ] )
參數說明

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

  例子

復制代碼 代碼如下:
<?php
if(preg_match("/php/i" "PHP is the web scripting language of choice" $matches)){
print "A match was found:" $matches[];
} else {
print "A match was not found";
}
?>

  
浏覽器輸出

復制代碼 代碼如下:
A match was found: PHP

  
在該例子中由於使用了 i 修正符因此會不區分大小寫去文本中匹配 php
提示
preg_match() 第一次匹配成功後就會停止匹配如果要實現全部結果的匹配即搜索到subject結尾處則需使用 preg_match_all() 函數
例子 從一個 URL 中取得主機域名

復制代碼 代碼如下:
<?php
// 從 URL 中取得主機名
preg_match("/^(http://)?([^/]+)/i""" $matches);
$host = $matches[];
// 從主機名中取得後面兩段
preg_match("/[^/]+[^/]+$/" $host $matches);
echo "域名為{$matches[]}";
?>

  
浏覽器輸出

復制代碼 代碼如下:
域名為jbnet

  
preg_match_all()
preg_match_all() 函數用於進行正則表達式全局匹配成功返回整個模式匹配的次數(可能為零)如果出錯返回 FALSE
語法
int preg_match_all( string pattern string subject array matches [ int flags ] )
參數說明

參數 說明 pattern 正則表達式 subject 需要匹配檢索的對象 matches 存儲匹配結果的數組 flags

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

  1. PREG_PATTERN_ORDER默認對結果排序使 $matches[] 為全部模式匹配的數組$matches[] 為第一個括號中的子模式所匹配的字符串組成的數組以此類推
  2. PREG_SET_ORDER對結果排序使 $matches[] 為第一組匹配項的數組$matches[] 為第二組匹配項的數組以此類推
  3. PREG_OFFSET_CAPTURE如果設定本標記對每個出現的匹配結果也同時返回其附屬的字符串偏移量

  下面的例子演示了將文本中所有 <pre></pre> 標簽內的關鍵字(php)顯示為紅色

復制代碼 代碼如下:
<?php
$str = "<pre>學習php是一件快樂的事</pre><pre>所有的phper需要共同努力!</pre>";
$kw = "php";
preg_match_all(/<pre>([sS]*?)</pre>/$str$mat);
for($i=;$i<count($mat[]);$i++){
$mat[][$i] = $mat[][$i];
$mat[][$i] = str_replace($kw <span style="color:#ff">$kw</span> $mat[][$i]);
$str = str_replace($mat[][$i] $mat[][$i] $str);
}
echo $str;
?>

  
正則匹配中文漢字
正則匹配中文漢字根據頁面編碼不同而略有區別
•GBK/GB編碼[xxff>]+ 或 [xaxff]+
•UTF編碼[x{e}x{fa}]+/u
例子

復制代碼 代碼如下:
<?php
$str = "學習php是一件快樂的事";
preg_match_all("/[xxff]+/" $str $match);
//UTF 使用
//preg_match_all("/[x{e}x{fa}]+/u" $str $match);
print_r($match);
?>

  
輸出

復制代碼 代碼如下:

  
Array
(
[] => Array
(
[] => 學習
[] => 是一件快樂的事
)

)


From:http://tw.wingwit.com/Article/program/PHP/201311/21230.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.