本文目錄一覽:
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函數
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
對於初學者來說,大家對 說明 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 ))
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/256887.html