本文目錄一覽:
- 1、php中的preg_match()函數
- 2、PHP正則相關的幾個preg函數
- 3、PHP函數preg_match_all正則表達式的基本使用詳細解析
- 4、如何運用PHP函數preg
- 5、PHP ereg 和 preg 的區別
php中的preg_match()函數
preg_match(‘/\\.(gif|jpeg|png|bmp|doc|)$/i’, $filename)匹配正則表達式正則表達式的意思是點開頭,然後那些擴展名結尾/i意思是不區分大小寫,那兩個函數的 用法不同返回值不同 第二個是全局匹配 既搜索所有匹配內容並以數組的模式返回,,,,下面那個錯誤問題,,那就是樓主沒有區分單引號和雙引號之間的區別,雙引號之間的變數,會被替換成變數的值,而單引號之間的變數會直接當成字元串處理,
PHP正則相關的幾個preg函數
preg_match: 字元串比對解析。
preg_match_all: 字元串整體比對解析。
preg_replace: 字元串比對解析並取代。
preg_split: 將字元串依指定的規則切開。
preg_match
字元串比對解析。
語法: int preg_match(string pattern, string subject, array [matches]);
返回值: 整數/數組
函數種類: 資料處理
內容說明: 本函數以 pattern 的規則來解析比對字元串 subject。比對結果返回的值放在數組參數 matches 之中,matches[0] 內容就是原字元串 subject、matches[1] 為第一個合乎規則的字元串、matches[2] 就是第二個合乎規則的字元串,余類推。若省略參數 matches,則只是單純地比對,找到則返回值為 true。
PHP函數preg_match_all正則表達式的基本使用詳細解析
了解正則表達式之前,須要掌握一些常用的正則表達式的基礎知識,這些如果能記得最好記得,記不住須要用的時候能查到就行,就多個特殊字元,所以說正則表達式玩的就是特殊,具體大家可以查看更加細緻的說明。
preg_match_all函數具體說明大家可以查看PHP手冊,本文運用
preg_match_all用於測試正則表達的效果。
實例代碼:
複製代碼
代碼如下:
$html
=
‘div
id=”biuuu”jb51.net/divdiv
id=”biuuu_2″jb51.net2/divdiv
id=”biuuu_3″jb51.net3/div’;
實例要求:分別將每一個DIV元素的ID和內容取出,如biuuu,biuuu_2,biuuu_3,jb51.net,jb51.net2和jb51.net3(一些常用的抓站要領就是這樣匹配的)
分析:字元串是一個基本的HTML元素,每一個DIV元素對應該一個ID和內容,並且是獨立的,首先考慮如何
取出一個DIV內的ID值和內容,如:jb51.net,然後匹配其它類似的元素。一個DIV中須要取出兩個值,也就是兩個匹配的表達式,第一個表達式用於匹配ID值(biuuu),第二個表達式用於匹配ID的內容(jb51.net),正則表達式常用的表達式運用小括弧,那麼前面的元素將會變成如下形式:
div
id=”(biuuu)”(jb51.net)/div
div
id=”(表達式1)”(表達式2)/div
好,運用如上小括弧把須要匹配的區域執行
了劃分,接下來就是如何
匹配各個表達式內的內容,我們猜想一個ID可能是字母,數字或下劃線,那這就變得基本了,運用中括弧就可以實現,如下:
表達式1:[a-zA-Z0-9_]+
(表示匹配大小寫字母,數字和下劃線)
那如何
匹配表達式2,因為ID的內容可以是任意的字元,但是要留心,不能匹配或字元,因為如果匹配這兩個字元將會把後面運用的DIV都匹配出來,因此須要排除這兩個字元開始的元素,也就是不匹配以或字元,如下:
表達式2:[^]+
(表示不匹配和字元)
這樣,須要匹配的子表達式就實現了,但是還要須要匹配一個
的表達式,要領如下:
表達式:/
‘\”(表達式1)\”‘(表達式2)\/div/
留心其中的雙引號”和/須要運用
\轉義字元轉義,然後把前面兩個表達式放進去,
如下:
‘\”([a-z0-9_]+)\”‘/div
id=\”([a-z0-9_]+)\”([^]+)\/div/
這樣就實現一個匹配每一個DIV元素ID值和內容的正則表達式,然後運用
preg_match_all函數測試如下:
複製代碼
代碼如下:
$html
=
‘div
id=”biuuu”jb51.net/divdiv
id=”biuuu_2″jb51.net2/divdiv
id=”biuuu_3″jb51.net3/div’;
preg_match_all(‘/div\sid=\”([a-z0-9_]+)\”([^]+)\/div/’,$html,$result);
var_dump($result);
結果:
複製代碼
代碼如下:
array(3)
{
[0]=
array(3)
{
[0]=
string(30)
“div
id=”biuuu”jb51.net/div”
[1]=
string(33)
“div
id=”biuuu_2″jb51.net2/div”
[2]=
string(33)
“div
id=”biuuu_3″jb51.net3/div”
}
[1]=
array(3)
{
[0]=
string(5)
“biuuu”
[1]=
string(7)
“biuuu_2”
[2]=
string(7)
“biuuu_3”
}
[2]=
array(3)
{
[0]=
string(8)
“jb51.net”
[1]=
string(9)
“jb51.net2”
[2]=
string(9)
“jb51.net3”
}
}
共有三個表達式,分別顯示每一個表達式匹配的值,並以數組的形式存儲,這樣就把每一個DIV元素的ID和內容取出。運用正則表達式最主要還是要知道須要什麼,然後跟椐須要執行
匹配,並且思路清晰,並適當的藉助preg_match_all函數執行
輸出調試,非常方便。
如何運用PHP函數preg
對於初學者來說,大家對 說明 array preg_split ( string $pattern, string $subject [, int $limit [, int $flags]] )
返回一個數組,包含 subject 中沿著與 pattern 匹配的邊界所分割的子串。
如果指定了 limit,則最多返回 limit 個子串,如果 limit 是 -1,則意味著沒有限制,可以用來繼續指定可選參數 flags。
flags 可以是下列標記的任意組合(用按位或運算符 | 組合):
PREG_SPLIT_NO_EMPTY
如果設定了本標記,則 preg_split() 只返回非空的成分。
PREG_SPLIT_DELIM_CAPTURE
如果設定了本標記,定界符模式中的括弧表達式也會被捕獲並返回。本標記添加於 PHP 4.0.5。
PREG_SPLIT_OFFSET_CAPTURE
如果設定了本標記,如果設定本標記,對每個出現的匹配結果也同時返回其附屬的字元串偏移量。注意這改變了返回的數組的值,使其中的每個單元也是一個數組,其中第一項為匹配字元串,第二項為其在 subject 中的偏移量。本標記自 PHP 4.3.0 起可用。
提示
如果不需要正則表達式的功能,可以選擇使用更快(也更簡單)的替代函數如 explode() 或 str_split()。
例 1672. PHP函數preg_split例子:取得搜索字元串的成分
// split the phrase by any number of commas or space characters,
// which include ” “, r, t, n and f
$keywords = preg_split (“/[s,]+/”, “hypertext language, programming”);
?
例 1673.PHP函數preg_split 將字元串分割成字元
$str = ‘string’;
$chars = preg_split(‘//’, $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?
例 1674. PHP函數preg_split將字元串分割為匹配項及其偏移量
$str = ‘string’;
$chars = preg_split(‘//’, $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?
PHP函數preg_split例子將輸出:
Array( [0] =
Array ( [0] = hypertext [1] = 0 ) [1] =
Array ( [0] = language [1] = 10 ) [2] =
Array ( [0] = programming [1] = 19 ))
PHP ereg 和 preg 的區別
PHP裡邊ereg已經逐漸被preg替代了
preg,代表「Perl的正則表達式(Perl Regular Expressions)」。
ereg,代表「擴展的正則表達式(Extended Regular Expressions)」。
這兩組函數的主要區別有:
1.preg_replace()裡面的正則可以寫成型如:”/…./”而ereg_replace()裡面的正則需寫成型如”…..”;
2.在逆向引用用preg_replace()可使用0-99個,而ereg_replace()最多為9個
3.preg_replace()能操作數組,而ereg_replace()不可以
4.ereg默認使用貪婪模式,並且不能修改
5.preg 的速度比 ereg 要快很多
等等。。。現在PHP基本都用preg了,ereg過時了東西。
原創文章,作者:N8LC2,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130860.html