正则表达式的历史背景
- 内容深厚的正则表达式
^.+@.+\\..+$
形式,字符串搜索与匹配的工具 - 应用范围
手机输入法、Windows文件搜索、linux 列出文件命令、网站用户注册,如邮箱、手机号码的表单验证等
正则表达式函数解析
- 准备工作,在此选择 php 来学习正则表达式
- 事先建立好一个 show() 函数
1 | /** |
- php 中常用的正则表达式函数(使用最频繁),返回匹配到的次数
preg_match($pattern, $subject, [array &$matches])
只会匹配一次,preg_match_all($pattern, $subject, array &$matches)
匹配所有
以下是代码实例
1 | $pattern = '/[0-9]/'; |
preg_replace($pattern, $replacement, $subject)
和preg_filter($pattern, $replacement, $subject)
代码实例
1 | $pattern = array('/[0123]/','/[456]/','/[789]/'); |
preg_grep($pattern, array $input)将无法匹配的值过滤掉 阉割版 preg_filter()
preg_split($pattern, $subject)
代码实例
1 | $pattern = '/[0-9]/'; |
preg_quote($str)
正则运算符转义正则表达式总结
都以preg_
开头
除preg_quote()
外,第一个参数都是正则表达式preg_match()
表单验证preg_replace ()
非法词汇过滤等
模式修正
- 概述
界定符、原子、量词、边界控制、模式单元 - 界定符
表示正则表达式开始和结束的位置
1 | $pattern = '/[0-9]/'; |
- regexpal 工具
用于调试正则表达式 原子概念
正则匹配最小单位
可见原子:键盘输出后肉眼可见的字符
不可见原子:换行符、回车、空格
在匹配中文字符时,建议先转换 Unicode http://tool.chinaz.com/Tools/Unicode.aspx原子的筛选方式
|
匹配两个或多个分支选择[]
匹配方括号中的任意一个原子 ,[789]
匹配 789 ,[a-zA-Z0-9]
匹配字母和数字[^]
匹配方括号中的原子之外的任意字符 [^789] 匹配非 789元字符(原子的集合)
.
匹配除换行符之外的任意字符\d
匹配任意一个十进制数字,即 [0-9]\D
匹配除数字之外的其他字符\s
匹配一个不可见原子 即[\f\n\r\t\v]\S
匹配一个可见的原子 [^\f\n\r\t\v]\w
匹配任意一个数字、字母、或下划线 [0-9a-zA-Z]\W
匹配任意一个非数字、字母、或下划线 [^0-9a-zA-Z]量词
{n}
表示其前面的原子恰好出现 n 次{n,}
表示其前面的原子最少出现 n 次{n,m}
表示其前面的原子最少出现 n 次,最多出现 m 次*
匹配0次,1次或多次其之前的原子 即 {0,}+
匹配1次或多次其之前的原子 即 {1,}?
匹配0次或1次其之前的原子
举例子
5{2} —- 55
[a-zA-Z]{2} —- ad1256135AW
[\w]{4} —- 连续出现4次字母、数字、下划线
[\w]{4,8} —- 4到8次字母、数字、下划线
\d+ —- 1到无穷大次数字出现边界控制
^
匹配字符串开始的位置$
匹配字符串结束的位置()
匹配其中的整体为一个原子修正模式
贪婪匹配 匹配结果有歧义时取其长
懒惰匹配 匹配结果有歧义时取其短 标识U
i
忽略英文大小写x
匹配过程中忽略空白 ,包括空格和制表符s
让元字符’ . ‘匹配包括换行符在内的所有字符
正则表达式实战
- 非空:
.+
- 匹配一个保留两位小数的浮点数:
\d+\.\d{2}$
- 大陆手机号:
^1(3|5|4|7|8)\d{9}
- email地址:
^\w+(\.\w)*@\w+(\.\w)+$
- url 地址:
^(https?://)?(\w+\.)+.[a-zA-Z]+$
正则表达式实战——正则表达式工具类
1 | 'require' => '/.+/', |