【記錄】正規表示式入門

cnguu發表於2019-04-21

基本語法

  • 界定符
  • 原子
  • 量詞
  • 邊界控制
  • 模式單元

界定符

表示一個正規表示式的開始和結束

$pattern = '/[0-9]/';
$pattern = '#[0-9]#';
$pattern = '{[0-9]}'; // 不推薦

原子

可見原子

Unicode 編碼表中用鍵盤輸出後肉眼可見的字元

1.  標點 ; ” _ ? . 等等
2.  英文字母數字 a-z, A-Z, 0-9
3.  漢字、日文、阿拉伯文等其他語言文字
4.  ∑, ∈, ∮, ≌ 等數理化公式符號
5.  其他可見字元

不可見原子

Unicode 編碼表中用鍵盤輸出後肉眼不可見的字元

1.  換行符 \n
2.  回車 \r
3.  製表符 \t
4.  空格
5.  其他不可見符號

元字元

原子的篩選方式

1.  | 匹配兩個或者多個分支選擇
2.  [] 匹配方括號中的任意一個原子
3.  [^] 匹配除方括號中的原子之外的任意字元

原子的集合

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

量詞

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

邊界控制

1.  ^ 匹配字串開始的位置
2.  $ 匹配字串結尾的位置

模式單元

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

修正模式

  • 貪婪匹配:匹配結果存在歧義時取其長(人家還想要嘛)

  • 懶惰匹配:匹配結果存在歧義時取其短(不要跟我比懶,因為我懶得跟你比)

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

常見正規表示式

1.  非空:/.+/
2.  保留兩位小數:/\d+\.\d{2}$/
3.  手機號:/^1[3-9]\d{9}$/
4.  Email 地址:/^\w+(\.\w+)*@\w+(\.\w+)+$/
5.  URL 地址:/^(https?:\/\/)?(\w+\.)+[a-zA-Z]+$/
6.  IP 地址:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
7.  中國大陸郵政編碼:[1-9]\d{5}(?!\d)
8.  身份證:\d{15}|\d{18}
9.  十六進位制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
10. Unicode 編碼中的漢字範圍:/^[u4e00-u9fa5],{0,}$/
11. 中文字元:[\u4e00-\u9fa5]
12. 雙位元組字元(包括漢字):[^\x00-\xff]
13. 空白行:\n\s*\r
14. 首尾空白字元:/^\s|\s$/

愛護牙齒

相關文章