正则表达式是用来验证数据的,验证数据非常简单,但是执行效率不高,通过一些元字符(具有特殊含义的字符)去验证数据
(一) 定义字符集
[a-e] 随意匹配a到e连续字符中的某一个字符
[aeiou] 随意匹配aeiou这5个零散字符中的某一个字符
[a-z] 随意匹配26个小写英文字母之一
[A-Z] 随意匹配26个大写英文字母之一
[a-zA-Z] 随意匹配一个大写 或 小写英文字母
[0-9] 随意匹配0到9之间任意一个数字
[a-zA-Z0-9] 随意匹配一个大小写英文字母或数字
[a-zA-Z0-9_-] 随意匹配一个大小写英文字母或数字或_下划线或-中横线之一
[5-7] 随意匹配5到7连续数字的一个数字
注意:
匹配数字、英文字母的一段 ,段的开始到结尾必须由小到大设置
像[7-2]、[h-c]等等都是错误的语法
(二) 特别字符集
$ 匹配目标字符串的”结尾”位置。
^ “托字符”匹配目标字符串的”开始”位置
^的作用:
① $pat = “/^hello/”; /hello需要在目标内容开始出现
② $pat = “/[^0-9]/”匹配非0到9之间数字以外的其他字符内容
( ) 标记一个子表达式的”开始”和”结束”位置
小括号( )作用:
① 提高子表达式优先级
② 可以从大的字符串中拆分小的内容出来
* 表示其前面那个单元出现0次或以上 任意次数
. 匹配除换行符 之外的任何单字符, 例如 .* 表示匹配任何内容
+ 表示其前面那个单元出现1次或以上 任意次数
? 表示其前面那个单元出现0次或1次 要么出现、要么不出现
这个符号是用来转义的,去除符号的特殊意思,只保留符号的本质意思
| 指明两项之间只选择一个,或 的意思
(三) 组合字符集
d 表示匹配0到9之间的一个数字 是[0-9]的别名
[1-9] 匹配一个非0数字
[5-9] 匹配5到9之间的一个数字
w 表示匹配(大小写)字母、数字、下划线其中的一个[a-zA-Z0-9_]
s 表示空格
//匹配hello 和 beijing中间有三个空格
$pat = “/hello beijing/”; //可读性不好
$pat = “/hellosssbeijing/”; //可读性好
(四) 限制字符
{m} 其前一单元严格出现m次
{m,} 其前一单元出现至少m次,至多不限制
{m,n} 其前一单元出现至少m,至多n次,n比m要大
(五) 模式修正符
正则完全的设置: $pat = “/正则内容/模式修正符”;
I : 忽略大小写
U :就近匹配,避免贪婪匹配!
(六) 单次 / 全局匹配
preg_match()
可以通过正则对目标字符串进行“单次”匹配
preg_match_all
(正则,内容,匹配结果)函数
该函数返回二维数组
可以实现对内容的全局匹配,所有与模式符合的内容都给匹配出来
例:
// 单次匹配
$pat = "/d/";
$str = "2016-12-14 19:21:55";
preg_match($pat,$str,$out); // array(1) { [0]=> string(1) "2" }
// 全局匹配
preg_match_assll($pat,$str,$out);
var_dump($out);
(七) 常用验证
// 邮箱验证
$pat = "/`[a-z1-9][a-z0-9.]{5,}@(d+|[a-z]+)(.[a-z]+)+$/i";
$pat =“/w+([.-]?w+)?@w+.(com|cn|net|org)/”;
// 手机号验证
$pat = "/1[3578]d{9}$/";