1. 程式人生 > >php正則表示式

php正則表示式

正則表示式考點

引子: 至少寫出一種驗證139開頭的11位手機號的正則表示式的  

正則表示式的作用:  分割, 查詢,匹配,替換字串

分隔符: 正斜線(/), hash符號(#),取反(~)

通用原子: \d(10進位制0-9), \D,      \w(數字字母下劃線), \W(\w取反),     \s(空白符), \S

\d 10進位制0-9
\D 任意一個非十進位制數字
\w 數字字母下劃線
\W 任意個非單詞字元
\s 任意一個空白字元(空格、換行符、換頁符、回車符、字表符)
\S 任意一個非空白字元

補充:不可見字元:

字元 含義
\a 報警
\b 退格
\f 換頁
\n 換行
\r 回車
\t 字表符

元字元:

. 除換行符之外的任意字元
* 前面的內容出現 大於等於0次
前面的內容出現0次或者1次
^ 必須以其開頭
+ 前面的內容出現1次或者多次
{n} 前面的內容恰巧出現n次
{n,} 前面的內容出現大於等於n次
{n,m} 前面的內容出現次數介於n和m中間
[] 匹配一個集合,[123]表示匹配1,2,3
() 後向引用或者可以當做一個整體
[^] [^123],  除了1,2,3之外的字元
| 或者
[-] [1-9] 數字1到9
$ 必須以其結尾

模式修正符:

i 不區分大小寫
m 通過分隔符進行分割
e 對匹配出的內容進行處理,php7已經remove
s 修正換行
U 取消貪婪模式
x 忽略模式中的空白符
A 必須以模式開頭
D 修正模式對反斜槓的忽略
u 對中文進行匹配的時候能用到

後向引用

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

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

preg_replace($pattern, '\\1', $str );//匹配abc

貪婪模式

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

$pattern = '/<b>.*?<\/b>/';//取消貪婪模式

//$pattern = '/<b>.*</b>/U';//取消貪婪模式

preg_replace_all($pattern, '\\1',  $str); //匹配出abc和bcd

正則表示式pcre函式

preg_match,preg_match_all, preg_replace, preg_replace_all

中文匹配

utf-8 漢字編碼範圍: 0x4e00-0x9fa5  需要使用u模式修正符使字串被當成utf-8

ANSI(gb2312):   0xb0-0xf7, 0xa1-0xfe  需要使用chr將ascii碼轉碼為字元

$str = '中文';

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

//$pattern = '['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xa1).'-'.chr(0xfe).']';

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

回到最初的問題:

自左向右的順序使用正則表示式的原子和元字元進行拼接,最終加入模式修正符

$str = '13988888888';

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

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

補充練習: URL, Email, IP, 手機號碼等

請寫出一個正則表示式,取出頁面中所有img標籤中的src值

$str = '<img alt='test' id='testId' src='test.jpg'/>';

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

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

參考:

慕課網