PHP 正则表达式
PHP 正则表达式
一、正则表达式简介
正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找和替换操作。目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。
- 在PHP中,正则表达式一般由正则字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。
- 在PHP中,正则表达式有三个作用:1.匹配,常用于从字符串中析取信息 2.用新文本代替匹配文本 3.将一个字符串拆分为一组更小的信息块
- 一个正则表达式中至少包含一个原子
二、两套正则表达式函数库
- PCRE库(推荐):使用
preg_
为前缀命名的函数; - POSIX库:使用
ereg_
为前缀命名的函数
三、PCRE库函数
函数名 描述 ----------------------|-------------------------- preg_match() | 进行正则表达式匹配 preg_match_all() | 进行全局正则表达式匹配 preg_replace() | 执行正则表达式的搜索和替换 preg_split() | 用正则表达式分割字符串 preg_grep() | 返回与模式匹配的数组单元 preg_replace_callback | 用回调函数执行正则表达式的搜索和替换
四、使用场景
- 表单验证
- url_rewrite (url地址重写)
- 爬虫
五、正则表达式的组成部分
1.定界符 (必须)
通常使用特殊字符组成,常用“/”。
2.原子(必须)
是正则表达式的最基本组成单元,而且在每个模式中最少要包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。
- 普通字符作为原子:如a~z,A~Z,0~9。
- 一些特殊字符和转义后元字符作为原子:
\' \* \+ \? \.
等。 - 一些非打印字符作为原子:如:f n r t v cx。
- 使用“通用字符类型”作为原子:如:d D w W s S。
- 自定义原子表([ ])作为原子:如:'/[apj]sp/'。
3.元字符
4.模式修正符
示例:
# 匹配一个字符a $pattern = '/a/'; # 匹配字符a,如果有返回1,没有返回0,只能匹配一次。 echo preg_match($pattern, '012344556'); # preg_match也可用于判断 if(preg_match($pattern, "1232423423", $matches)) { echo "匹配到了<hr/>"; # 并把匹配出来的字符以数组的形式赋值给$matches; # 打印结果:`array(1) {[0] => string(1) "a"}`; var_dump($matches); }else { echo "没有匹配"; }
元字符匹配:
# 如果只想匹配 `.`,特殊含义的字符要转义。 $pattern = "/\./" # 匹配非打印字符 $pattern = "/\n/" # 匹配0-9数字 $pattern = "/\d/"; # 匹配除了0-9的数组 $pattern = "/\D/"; # 匹配数字+大小写字母+下划线 $pattern = "/\w/"; # 匹配除了数字、大小写字母、下划线 $pattern = "/\W/"; # 匹配空白符(换行、缩进、空格) $pattern = "/\s/"; # 匹配除了空白符的字符 $pattern = "/\S/"; # `*` 代表匹配前面的原子出现0、1、或多次 $pattern = "so*u"; # `+` 代表匹配前面的原子出现1次、或多次 $pattern = "so+u"; # `?` 匹配前面的一个原子出现0次或者1次 $pattern = "hao?sou"; # 匹配除了换行符的任意字符 $pattern = "/./"; # `|`代表或者 $pattern = "/a|b|c/"; # 匹配前面的一个原子恰巧出现n次; $pattern = "/hao{2}sou/"; # 匹配出现>=2次 $pattern = "/hao{2, }sou/"; # 匹配出现2-5次 $pattern = "/hao{2, 5}sou/"; # `^` 必须以该原子开头 $pattern = "/^aaa/"; # `$` 必须以该原子结尾 $pattern = "/aaa$/"; # 严格模式 # 必须严格只能匹配aaa。 $pattern = "/^aaa$/"; # a | b | c $pattern = "/[abc]/"; # 除了a,b,c $pattern = "/[^abc]/"; # `()`可以看做一个整体,还可以做反向引用 # 比如要匹配协议头为http、https、ftp $pattern = "/(http|https|ftp):\/\//"; # 匹配除了空白符的任意字符 $pattern = "/.*/"; # `.*`贪婪模式 $str = "<b>abc</b><b>abc</b>"; $pattern = "/<b>.*</b>/"; # `.*?`取消贪婪模式 $pattern = "/<b>.*?</b>/"; 或: $pattern = "/<b>.*</b>/U";
模式修正符:
`i`代表ignore,忽略大小写 `m`匹配多行 `.`修正.的换行符 `x`忽略正则表达式里面的空白符 `D`取消$对\n的忽略
相关推荐
wangzhaotongalex 2020-10-20
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
taomengxing 2020-09-07
MaggieRose 2020-08-19
jyj00 2020-08-15
MaggieRose 2020-07-04
modaiairen 2020-06-28
ziggurat 2020-06-28
JnX 2020-06-27
jyj00 2020-06-26
山水沐光 2020-06-25
shqhope 2020-06-23
eroshn 2020-06-21
码墨 2020-06-16
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13