定义
正则表达式是一种具有特定模式用于匹配文本的字符串。
作用
查找,匹配,替换,分割
定界符
-
作用:模式需要由定界符闭合包括。
-
元素:定界分隔符可以使用任意非数字字母下划线以及空白字符。
-
举例:经常使用的分隔符为正斜线(\),hash符号(#)以及取反符号(~).
-
注意:如果分隔符需要在模式内进行匹配,它必须使用反斜线(\)进行转义
通用原子
- \d 匹配任何一个数字 [0-9]
- \D 匹配任何一个非数字 [^0-9]
- \w 匹配任何一个数字字母下划线 [0-9a-zA-Z]
- \W 匹配任何一个非数字字母下划线 [^0-9a-zA-Z]
- \s 匹配任何一个空白字符 [\t\n\r\v]
- \S 匹配任何一个非空白字符 [^\t\n\r\v]
元字符
- 定义:在正则表达式中具有特殊含义的专用字符
- . 匹配除换行以外的任意字符
- | 匹配多个分支选择
边界修饰符
- ^ 匹配一行的开头位置(也是取反的符号)
- $ 匹配一行的结束位置
- \b 单词边界(只对英文单词有效)
- \B 非单词边界
量词
- * 0次或多次 >=0
- + 1次或多次 >=1
- ? 0次或1次 =0或=1
- {n} 重复n次
- {n,} 重复n次或以上
- {n,m} 重复n至m次
禁止贪婪
**题示**:贪婪模式是尽可能匹配多的,禁止贪婪是匹配少的
- ? 当该字符紧跟在任何一个其他限制符{*,+,{n},{n,},{n,m}}后面时,匹配模式为非贪婪模式
- U 模式修正符
模式修正符
- U 禁止贪婪
- i 不区分大小写
- x 忽略模式中的空白
- s 将字符串视为单行,‘.’也能匹配到换行
- m 将字符串视为多行,‘^,$’匹配行首行尾
模式单元
作用:
- 分组 (www)作为一个原子
- 限制多选结构 (https)|(https)
- 捕获
反向引用
- 定义:对模式单元中捕获文本内容的引用
- 注意:捕获的文本存储在临时缓冲区中,缓冲区的编号范围是1-99
- 格式:反向引用的格式为+编号 如\1 ->括号的序号
- 非:非捕获元字符‘?:’
举例
$pattern = '/123(\d{2}(?:\d{2}(\d{2})(?:\d{2}\2)))/';
以下4个字符串:
1234455667744
1234455667766
1234455667755
1234455667777
能匹配到的是1234455667766,
原因如下:
- 括号包括住的作为一个原子,4个括号包括的都是连续两个数字,其中第二个和第四个一样,在括号里含有‘?:’,是忽略不编码的意思,第一个和第三个一样,正常编码,所以\1是引用第一个括号的内容,\2是引用第三个括号的内容,第三个括号匹配到的内容为66,故最后两个数字应该为66
中文模式
在utf-8环境下,汉字的编码范围是0x4e00 - 0x9fa5,在ANSI(gb2312)环境下编码范围为0xb0 - 0xf7 , 0xa1-0xfe
在utf-8环境下,需使用U模式修正符使模式字符串被当做UTF-8,在ASNI(gb2312)环境下,需使用chr将ASCII码转换为字符
$pattern = '/\x{4e00}-\x{9fa5}/';
$pattern = '/['.chr(0xb0).'-'.chr(0xf7).']|['.chr(0xb0).'-'.chr(0xf7).']['.chr(0xb0).'-'.chr(0xf7).']/';
PHP函数
- preg_match 执行匹配正则表达式(匹配一项)
- preg_match_all 执行一个全局正则表达式匹配(匹配全部)
- preg_replace 执行一个正则表达式的搜索和替换
- preg_replace_callback 执行一个正则表达式搜索并且使用一个回调进行替换
- preg_filter 执行一个正则表达式搜索和替换
- preg_grep 返回匹配模式的数组条目
- preg_split 通过一个正则表达式分隔字符串
- preg_quote 转义正则表达式字符
- 更多信息点击查看
常见验证
// 验证联系电话
$isMob="/^1[34578]{1}\d{9}$/";
$isTel="/^([0-9]{3,4}-)?[0-9]{7,8}$/";
// 验证邮箱方法
$preg_email='/^[a-zA-Z0-9]+([-_.][a-zA-Z0-9]+)*@([a-zA-Z0-9]+[-.])+([a-z]{2,5})$/ims';