php正则表达式

发布时间:2020/04/25 作者:天马行空 阅读(953)

1、正则作用
分割、匹配、查找、替换


2、正则函数
(1)preg_match(正则模块,字符串,数组的结果)
例如:preg_match(‘/abc/’,’askjdabc’,$array);
print_r($array);输出abc的数组
(2)ereg(正则模块,字符串,数组的结果)
例如:ereg(‘abc’,’askjdabc’,$array);
print_r($array);


3、正则元素
(1)原子a-z、原子表、转义字符等
a、a-z\0-9等 //常见的字符
b、(abc) //用圆括号括起来的N单元符号,全匹配
c、[^abc]元子表,匹配其中的一个 ^表示向反匹配
d、转义字符
\d 包含所有数字[0-9]
\D 除所有数字外[^0-9]
\w 包含所有的普通字符[a-zA-Z_0-9]
\W 除所有的普通字符外的[^a-zA-Z_0-9]
\s 包含所有空白域如回车、换行、分页[\f\n\r]
\S 包含空白符之外的其他字符
…………


(2)元字符号(有特殊功能的字符)
* 匹配前一个内容的0次1次或多次
. 匹配任何一个内容0次1次或多次,但不包含回车换行
+ 匹配前一个内容的1次或多次
?匹配前一个内容的0次或1次 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的
| 选择匹配类似PHP中的| (因为这个运算符合是弱类型导致前面最为整体匹配)
^ 匹配字符串首部内容
$ 匹配字符串尾部内容
\b 匹配单词边界,边界可以是空格或者特殊符合
\B 匹配除带单词边界意外内容
{m} 匹配前一个内容的重复次数为M次
{m,} 匹配前一个内容的重复次数大于等于M次
{m,n} 匹配前一个内容的重复次数M次到N次
( ) 合并整体匹配,并放入内存,可使用\\1 \\2…依次获取括号中储存在内存中的内容 (?:)让子模式不被放入结果的数组中
(?=pattern) 正向肯定预查 在匹配前查看其中是否包含了某些字符,例如(必须包含字母数字和指定的特殊字符):/^(?=.*[0-9].*)(?=.*[a-zA-Z].*)(?=.*[\@\&\_\/\\\\\*].*)[a-zA-Z0-9\@\&\_\/\\\\\*]{6,16}$/;
(?!pattern) 正向否定预查 例如(不包含空白的字符): /^(?!.*\s.*).{4,20}$/


(3)模式修正符(i\m\S\U大小写全匹配等)
( ) 圆括号因为是内存处理所以最高
* ? + { } 重复匹配内容其次
^ $ \b 边界处理第三
| 条件处理第四
最后按照运算顺序计算匹配


/正则/U
i 正则内容在匹配时候不区分大小写(默认是区分的)
m 每行分别进行匹配
s 修正.的换行
S 将转义回车取消是为单行匹配如. 匹配的时候
x 忽略正则中的空白
A 强制从头开始匹配
D 强制$匹配尾部无任何内容 \n
U 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束,U不通用,可以用?解决贪婪如(.*? 或者 .+?)
常用在采集程序上的正则表达式


4、preg_match_all(正则,内容,正则结果)全部匹配函数


5、preg_replace(正则,替换后内容,替换前内容,替换的个数)正则替换函数


6、preg_split(正则,结果)正则切割


后项引用:
正则表达式匹配出来的值,在后面进行引用

$str = 'abc';
preg_replace('/(.*)/','\\1',$str);



贪婪模式:

$str = 'abcbcd';
preg_replace_all('/(.*?)/','\\1',$str);
preg_replace_all('/(.*)/U','\\1',$str);



中文匹配:
UTF-8汉字编码范围0x4e00-0x9fa5,需要使用u修正字符把字符串当成utf8来匹配
‘/[\x{4e00}-x{9fa5}]+/u’
GB2312编码范围0xb0-0xf7,0xa1-0xfe,要使用chr()
‘/[‘.chr(0xb0).’-‘.chr(0xf7).’][‘.chr(0xa1).’-‘.chr(0xfe).’]/’


实例:匹配所有img标签中的src值

$str = 'aaa';
$pattern = '//i';
preg_match($pattern,$str,$match);


关键字php 正则