每次都是想到需要正则的时候就百度下就好了,每次都这样,没有系统的归纳,一看就是好久,于是今天打算随便整理整理。
正则是干嘛的,基本上不用多说了,校验格式的。
1、 / 是定界符,一般起和终止都是/
2、+ 规定是它前面的字符必须连续存在一次或多次:[1,~]
3、* [0,~]
4、? [0,1]
其他的有
\s :用来匹配空格和换行符还有tab键
\S :用来匹配除了空格之外的所有字符
\d :0-9的数字
\D [^0-9]表示非字符字符
\w 匹配字母下划线数字
\W 匹配非字符下划线数字
. 点匹配除了回车和换行以外的所有字符,可以说很强大的
总结:小写和大小的是相反的。正则表达式可以:/内容/ 也可以^内容$
2、还有不少
1、[a-z] 表示和a-z内的任何一个小写字母匹配
2、[a|z]
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
. 任何单个字符(. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
, 分割
以上就是些概念了,主要说说惰性匹配和贪婪匹配
<?php
$str = 'abcdefght43534a534t';
$preg = '/a.*?t/';
$preg1 = '/a.*t/';
$result = preg_match_all($preg,$str,$match);
$result1 = preg_match_all($preg1,$str,$match1);
var_dump($match);
var_dump($match1);
.*? 是惰性匹配,匹配到满足条件的abcdefght就停止了此次匹配,不会干扰后面的继续匹配
所以第一个输出结果是
array(1) {
[0]=>
array(2) {
[0]=>
string(9) "abcdefght"
[1]=>
string(5) "a534t"
}
}
.* 是贪婪匹配,他会尽可能多的占用字符串,所以结果是
array(1) {
[0]=>
array(1) {
[0]=>
string(19) "abcdefght43534a534t"
}
}
4、非获取匹配
(?:pattern)
非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)
非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
5、在匹配结束以后会带参数如:gimsex,各自的含义是:
1、/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
2、/i 表示匹配的时候不区分大小写,这个跟其它语言的正则用法相同
3、/m 表示多行匹配。什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号
4、/s 与/m相对,单行模式匹配。
5、/e 可执行模式,此为PHP专有参数,例如preg_replace函数。
6、/x 忽略空白模式。