PHP正则表达式
一、函数:
1、preg_match(匹配一次)
2、preg_match_all(匹配多次,全局匹配)
3、preg_replace
4、preg_split
二、PHP正则语法
1、限定符:可以是//,也可以##
2、元字符
1)、使用一个字符本身,来代表一个字符
2)、使用一个转义字符表示一个字符
3)、表示一个集合中某一个字符
[begin-end],如[a-zA-Z]:表示所有字母
[^abc]:除abc外其他的字符
4)、点.:表示出换行之外的任意一个字符
|或者,如:$reg = '/red|blue|green/';
5)、中文范围:[x{4e00}-x{9fa5}] 限定符后面加u,表示以utf-8形式匹配
3、量词:用在元字符后面,用来约束筛选的字符数量
1)、{m,n}:最少m个,最多n个
2)、{m}:固定m个
3)、特殊的量词:
*:表示任意一个数量,可能是0个,也可能是多个
+:表示至少有一个
?:表示可能0个,可能1个
****** 注:?放在量词的后面,表示采用懒惰模式匹配,PHP默认贪婪模式
4、其他
^表示被匹配字符串必须以后面的字符开头,
$表示被匹配的字符串必须以$前面的字符结束
如:'/^red[w]*[d]$/':以red开头,以数字结尾
5、模式修正符:
i:忽略大小写
s:万能点模式, . 能匹配任意字符
u:强制使用utf-8解析中文
U:全局懒惰模式,匹配一个字符
三、分组
1、使用小括号将匹配的结果分组,筛选出我们需要的内容
preg_metch()匹配后,将结果保存在数组中
索引为0,为整个规则匹配的结果
索引为1,为第一个分组
索引为2,为第二个分组
。。。
2、反向引用分组:
在$reg规则里引用分组,使用 ,1表示引用第一个分组;2表示引用第二个分组
3、非捕获子组:
如果不想筛选分组的结果,可以在分组()里使用?:,表示非捕获
$reg = '/<img.*src=(?:.*).*"/';
代码:
四、预查
1、正向预查:匹配时,从左到右匹配到需要预查的地方,先看看是什么内容
(?=预查的内容)
示例代码:
执行结果
由于采用懒惰模式,所以只匹配了helloC;
2、非正向预查
预先从左到右查看一下,后面不是某个字符(?!)
3、逆向预查
从右向左先预查(?<=)
4、非逆向预查(?<!)
练习:
1、将TopicQuestionModel修改为topic_question_model