PHP 正則(2)

PHP 正則

有兩個比較重要的方法 preg_match()preg_replace(); 給一個簡單的例子。要對這個進行匹配,用到的模式如下

$str = "123123,123123,123123,213123,234234";
$model = "/^([0-9]*),(([0-9]*),))*([0-9]*)$/";
$match = array();
$ret = preg_match($model, $str, $match);
$match 中就有匹配到的內容。

貪婪匹配非貪婪匹配 可以參考下面的例子

$eee = "(12)-123 23-(233)";

//貪婪匹配的例子 這個模式只能匹配 一個。
$preg = "/\(.*\)/";
$match = array();
$ans = preg_match_all($preg,$eee,$match);
var_dump($match);
// 結果是隻能匹配一個模式。因爲第一個從整體看來,是一個完整的括號,所以會匹配整個結果。

//非貪婪匹配模式,可以把所有的括號中的內容都找出來,卻別就是*後面的問號。
$preg = "/\(.*?\)/";
$match = array();
$ans = preg_match_all($preg,$eee,$match);
var_dump($match);

正則替換

preg_replace() 可以對 $str 中的內容進行替換。還是上面的例子,這次我們把$eee中國年的括號裏面的數字替換成字符串haha.可以設計出如下的方法。注意 preg_replace 的用法。$pattern 和 $replace 都是array,下面是具體的匹配模式。

按照正則表達式的規則對匹配的內容進行替換。
$eee = "(12)-123 23-(233)";
$preg = array("/\(.*?\)/");
$replace = array("haha");
$ans = preg_replace($preg,$replace,$eee);
var_dump($ans);

上面是比較基本的用法,下面這個稍微複雜一些。

$str = preg_replace("/(<a.*?>)(.*?)(<\/a>)/",'\1<span class="link">\2</span>\3', $str); 
// 其中用了三個子模式(每個圓括號中內容爲一個子模式),第一個是鏈接開始標籤,第二個是鏈接文本
// 第三個是</a> 這個正則正則替換的功能是,給所有的鏈接加上<span>標籤,給鏈接的內容加上樣式。

// 通過學習上面的表達是,我們可以將我們前面的例子 轉化成這樣。
$eee = "whie2ch(12)-123 23-function(233)";
$preg ="/(\w*)\(.*?\)/";
$replace ="\1word\2bb"; // 將變量換成word,將括號及括號裏面的內容換成bb \1 \2 代表第幾個括號裏面匹配的內容。
$ans = preg_replace($preg,$replace,$eee);
var_dump($ans);

PHP 修正符

$eee ="whie2ch(1 \n2)-123 n 23-function nhehe(23 \n3) sfsdf(24 \n5)";
$preg ="/\(.*?\)/";
//$replace ="\1word\2bb";
$match = array();
$ans =preg_match_all($preg,$eee,$match);
var_dump($match);
// 這樣,發現是匹配不到括號裏面的內容的。因爲.不包括換行。

// 使用方法,把上面的 $preg 改成下面這樣。
$preg ="/\(.*?\)/s";
重新運行程序,發現所有的內容都匹配出來了。

PHP 的幾個修正符如下

修正符 含義
s 讓.包括換行,可以實現跨行匹配
U 讓?默認匹配成貪婪狀態
i 忽略大小寫
u 模式串被當做UTF8
m 當 設定了此修正符,行起始(^)和行結束($)除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符(\n)的之後和之前

PHP修正符 的使用方式入上面的程序所示。將/your_regrex/X,其中X代表你的修正符,根據需要選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章