1. 程式人生 > >正則表示式基礎語法

正則表示式基礎語法

這篇文章主要記錄了正則表示式的一些基本語法、修正模式和php常用的正則表示式函式!

一、正則表示式基本語法:

  • 界定符

  • 原子

  • 元字元

  • 量詞

  • 邊界控制

  • 模式單元

1. 界定符

表示一個正則表示式的開始和結束。(如:/[0-9]/#[0-9]#或{[0-9]})
一般使用/或#作為界定符,不建議用{}

2. 原子

(1)可見原子:Unicode編碼表中用鍵盤輸出後肉眼可見的字元
     如:標點;"_?.等,英文字母數字a-z A-Z 0-9,其他可見字元等
(2)不可見原子:Unicode編碼表中用鍵盤輸出後肉眼不可見的字元
     如:換行符\n,回車\r,製表符\t
,空格,其他不可見符號

3. 元字元

(1)原子的篩選方式:
    |   匹配兩個或者多個分支選擇;
    []  匹配方括號中的任意一個原子;
    [^] 匹配除方括號中的原子之外的任意字元;

(2)原子的集合:
    .   匹配除換行符之外的任意字元,即[^\n];
    \d  匹配任意一個十進位制數字,即[0-9];
    \D  匹配任意一個非十進位制數字,即[^0-9];
    \s  匹配一個不可見原子,即[\f\n\r\t\v];
    \S  匹配一個可見原子,即[^\f\n\r\t\v];
    \w  匹配任意一個數字、字母或下劃線,即[
0-9a-zA-Z_]; \W 匹配任意一個非數字、字母或下劃線,即[^0-9a-zA-Z_];

4. 量詞

{n}   表示其前面的原子恰好出現n次;
{n,}  表示其前面的原子最少出現n次;
{n,m} 表示其前面的原子最少出現n次,最多出現m次;
*     匹配0次、1次或者多次其之前的原子,即{0,};
+     匹配1次或者多次其之前的原子,即{1,};
?     匹配0次或者1次其之前的原子,即{0,1};

5. 邊界控制

^  匹配字串開始的位置;
$  匹配字串結尾的位置;

6. 模式單元

()  匹配其中的整體為一個原子;

二、模式修正:

1.懶惰匹配與貪婪匹配

(1)  貪婪匹配:匹配結果存在歧義時取其長(預設為貪婪模式)
(2)  懶惰匹配:匹配結果存在歧義時取其短(懶惰模式標識:U  即:只需要在正則表示式的末尾加上U  如:/so.+234/U)

2.常見修正模式

U  懶惰匹配;
i  忽略英文字母大小寫;
x  忽略空白;
s  讓元字元'.'匹配包括換行符在內的所有字元;
e  配合函式preg_replace()使用,可以把匹配來的字串當作正則表示式執行;

三、PHP中常用的正則表示式函式:

1. preg_match()與preg_match_all()

preg_match($pattern,$subject,[array &matches])
    第三個引數是傳遞引用,引數可選;
    preg_match()只會在$subject中匹配一次;
    return 匹配的次數(0次或1次)
preg_match_all($pattern,$subject,array &matches)
    第三個引數是傳遞引用,引數必填;
    preg_match_all()會把$subject中所有符合的匹配出來;
    return 匹配的次數(0次或多次)

2. preg_replace()與preg_filter()

preg_replace($pattern,$replacement,$subject)
    return 返回被替換後的結果,(當為陣列集時:不管替換部分和沒有替換部分都會返回);
preg_filter($pattern,$replacement,$subject)
    return 返回替換後的結果,(當為陣列集時:只保留被替換過的,沒有替換的部分不返回;)

3. preg_grep()

preg_grep($pattern,array $input)
    return 只返回被匹配到的結果集,沒有匹配到的就過濾掉不返回

4. preg_split()

preg_split($pattern,$subject)
    return 用匹配到的結果去擷取字串,將擷取後的結果返回;

5. preg_quote()

preg_quote($str)
    正則運算子轉義,如: .\+*?[^]$(){}=!<>|:-