正则表达式的作用
分隔、查找、匹配、替换字符串
正则表达式的组成部分
分隔符
"/"
、"#"
、"~"
通用原子
-
\d
: 十进制的0-9
-
\D
: 对\d取反:除了0-9
-
\w
: 数字、字母、下画线
-
\W
: 除了数字、字母、下画线
-
\s
: 空格、换行符、换页符、回车符、字表符
-
\S
: 除了空格、换行符、换页符、回车符、字表符
常用原子符
-
.
: 除了换行符之外的任意字符
-
*
: 匹配前面内容出现0次、1次或多次
-
?
: 匹配前面内容出现0次或1次
-
^
: 开头
-
dollar符
: 结尾
-
+
: 匹配前面内容出现1次或多次
-
{n}
: 出现n次
-
{n,}
:出现大于等于n次
-
{n,m}
: 出现大于等于n次 小于等于m次
-
[]
: 集合,匹配中括号里面的[abc]则是匹配a 或 b 或 c
-
()
: 后向引用或当作整体
-
[^]
: 取反[^abc]除了a 、除了b、 除了c
-
|
: 或者 -
[-]
: 表示范围
模式修正符
-
i
: 不区分大小写
-
m
: 多文本模式
-
s
: 单行模式
-
U
: 取消贪婪模式
-
x
: 忽略模式中的空白符
-
A
: 必须以该模式开头
-
D
: 如果这个修饰符被设置, 模式中的元字符美元符号仅仅匹配目标字符串的末尾. 如果这个修饰符 没有设置, 当字符串以一个换行符结尾时, 美元符号还会匹配该换行符(但不会匹配之前的任何换行符). 如果设置了修饰符m, 这个修饰符被忽略
-
u
: 进行utf-8匹配
后向引用
$str = '<b>abc</b>';
$pattern = '/<b>(.*)<\/b>/';
preg_replace($pattern,'\\1',$str);//这里\1代表的就是括号里匹配上的内容,也就是abc
贪婪模式
$str = '<b>abc</b><b>bcd</b>';//匹配每一不b标签
$pattern = '/<b>(.*?)<\/b>/';//.*存在贪婪模式,会一直匹配到最后,加上问号后 取消贪婪模式,匹配一个之后再进行下一个匹配
preg_replace($pattern,'\\1',$str);
//使用以下方法也可以取消贪婪模式
$pattern = '/<b>(.*)<\/b>/U';
正则表达式PCRE函数
-
preg_filter
— 执行一个正则表达式搜索和替换
-
preg_grep
— 返回匹配模式的数组条目
-
preg_last_error
— 返回最后一个PCRE正则执行产生的错误代码
-
preg_match_all
— 执行一个全局正则表达式匹配
-
preg_match
— 执行匹配正则表达式
-
preg_quote
— 转义正则表达式字符
-
preg_replace_callback_array
— Perform a regular expression search and replace using callbacks
-
preg_replace_callback
— 执行一个正则表达式搜索并且使用一个回调进行替换
-
preg_replace
— 执行一个正则表达式的搜索和替换
preg_split
— 通过一个正则表达式分隔字符串
例子
写出一个正则表达式,取出页面中所有img标签中的src值
$str = '<img alt="xxx" src="aaa.jpg" />';
$pattern = '/<img.*?src=["\'].*?["\'].*?\/?>/';
/**
* 分析
* img的标签特性:有<img开头,中间可能有其他属性:所以有<img.*?
* src标签:src=["\'].*?["\'] 可能是以单引号或双引号
* 后面可能还有别的属性:.*?
* 以/> 或 >结尾: /?>
* 最终拼接成:<img.*?src=["\'].*?["\'].*?\/?>
**/