编程技术

PHP 之正则表达式

cnguu · 10月22日 · 2018年 ·

基本语法

  • 界定符
  • 原子
  • 量词
  • 边界控制
  • 模式单元

界定符

表示一个正则表达式的开始和结束(”//”, “##”, “{}”)

$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

常见正则表达式

  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$/
0 条回应