1. 首頁>>開發筆記

關于PHP正則表達式

最近接一活兒是關于爬取數據,爬取這塊略過,其中數據處理需要用到正則整理記錄一下,以下部分數據整理來源于網絡項目中已得到驗證確定可行。


Perl正則表達式函數:

preg_grep($mode,$str) //匹配查找,返回一個數組;

preg_match($mode,$str,$return) //在字符串中查找匹配項,返回一個數組。

preg_match_all($mode,$str,$return [,int flags])

preg_split($mode,$str [,int limit 切割多少次 [,int flags] ] ) //使用正則表達式分割字符串,并將結果以數組的形式返回(類似explode)。

preg_replace($mode,$replacement,$str [,int limit 匹配多少次]) //查找和替換子字符串(類似str_replace)

preg_quote($str) //在每個正則表達式的特殊字符前面加入一個轉義字符(反斜線“”),正則表達式的特殊字符包括:.+*?[^]$(){}=!<>|:

解題方法總結:

1.先寫出一個要匹配的字符串

2.自左向右的順序使用正則表達式的原子和元字符拼接

3.加入模式修正符


【常用正則表達式】

//刪除一對中括號內的內容:

$str = 'abc[url]123[/url]xyz';

$pattern = '/[urlS*[/urlS*]/';

$str = preg_replace($pattern, '', $str);

echo $str . ''; //輸出:abcxyz

 

//PHP匹配多對中括號中的內容:

$str = '這是[3]def[25]我的[26]';

$pattern = '/[([a-z0-9]+)]/';

preg_match($pattern, $str, $match);

print_r($match);

 

//匹配所有大括號里面的內容:

$str = 'abc{title}def{author}mn';

$pattern = '/{(.*)}/U';

preg_match($pattern, $str, $match);

print_r($match);

 

//匹配網頁源代碼中的圖片路徑:

$str = '<img alt="標題" id="pic" src="http://test.cn/avatar.jpg" />';

$pattern = '/<img.*?src="(.*?)".*?/?>/i';

preg_match($pattern,$str,$match);

print_r($match);

 

//匹配當前頁面的所有超鏈接:

$str = '<a href="http://www.test.com/a.html">跳轉</a>';

$pattern = '/<a(.*?)href="(.*?)"(.*?)>(.*?)</a>/i';

preg_match($pattern, $str, $match);

print_r($match);

 

//匹配郵件

$str = '12345@qq.com';

$pattern = "/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,})$/i";

preg_match($pattern, $str, $match);

print_r($match);

 

//匹配11位手機號:

$str = '13299803211';

$pattern = "/^1(3|5|8)d{9}$/";

preg_match($pattern, $str, $match);

print_r($match);

 

//匹配139開頭的11位手機號碼

$str = '13912345678';

$pattern = '/^139d{8}$/';

preg_match($pattern,$str,$match);

print_r($match);

 

//UTF-8編碼下提取字符串中的中文:

$str = 'hello 中文 byebye';

$pattern = '/[x{4e00}-x{9fa5}]+/u';

preg_match($pattern, $str, $match);

print_r($match); //“中文”

 

//替換字符串中的中文為空

$res = preg_replace($pattern,'',$str);

echo $res.’';

 

//分割中文字符串為等長度元素的數組(英文可以用str_split,但中文會亂碼)

$str = '中文字符串';

$res = preg_split('/(?<!^)(?!$)/u', $str);

print_r($res);

 

//過濾網頁上的所有script標記

$str = '<script type="text/javascript" src="dd.js">alert(123);</script><p style="color: red">測試php正則匹配掉js代碼</p>';

$pattern = "/<script[sS]*?</script>/i"; //過濾JS標簽

$pattern = "/<[/!]*?[^<>]*?>/si"; //過濾HTML標簽

$res = preg_replace($pattern, "", $str);

echo $res.’';

 

//替換<b>標簽為空

$str = '<b>abc</b><b>abc</b>';

$pattern = '/<b>(.*?)</b>/';

$res = preg_replace($pattern,'',$str);

echo $res.'';

轉義字符

d 包含所有數字[0-9]

D 除所有數字外[^0-9]

w 包含所有字符(大小寫英文字母、下劃線、數字) [a-zA-Z_0-9]

W 除所有字符(大小寫英文字母、下劃線、數字)外 [^a-zA-Z_0-9]

s 空白區域如回車、換行、分頁等 [ ]

S 非空白區域如回車、換行、分頁等 [^ ]


元字符

. 匹配任意次但不包含回車換行

* 匹配任意次

? 匹配0次或1次

+ 匹配1次或多次

| 選擇匹配(或者)

^ 匹配開頭(方括號中表示非)

$ 匹配尾部

{m} 匹配前一個內容的重復次數為m次

{m,} 匹配前一個內容的重復次數大于等于m次

{m,n}匹配前一個內容的重復次數m次到n次

( ) 合并整體匹配,并放入內存,可使用 ...依次獲取

 

模式修正符: 【/正則/U 】

小寫i:不區分大小寫

小寫m:匹配首內容或尾內容時采用多行識別匹配

小寫s:將轉義回車取消視為單行匹配

小寫x:忽略正則中的空白

大寫A:強制從頭開始匹配

大寫D:強制$匹配尾部無任何內容

大寫U:禁止貪婪匹配,只跟蹤到最近的一個匹配符并結束,常用在采集程序

小寫u:匹配中文


如無特別說明,文章均為本站原創。轉載請注明出處:http://www.sysbbie.com/phper/30.html

發表評論

點擊我更換圖片

評論列表

聯系我們

在線咨詢:點擊這里給我發消息

微信號:alipays123

工作日:9:30-18:30,節假日休息

主機測評 主機評測 網站模版
免费观看性生交大片_免费观看18禁欲无遮挡奶水下_AV无码东京热亚洲男人的天堂_欧美大片欧美激情性色A∨在线