PHP正则表达式
# PHP正则表达式
# 1. preg_match 函数
用于执行一个正则表达式匹配。正则表达式描述了一种字符串匹配的模式,通过这个模式在特定的函数中对字符串进行匹配、查找、替换及分割等操作。作为一个匹配模板,是由原子、特有功能字符及模式修正符三部分组成的文字模式。
元字符:具有特殊含义的字符,如 ^(开始)和 $(结束);
原子:用来匹配的字符,如果 \d(匹配0到9);
定界符:除了字母、数字和反斜线‘\’以外的任何字符都可以作为定界符,如 #、!等都是可以作为定界符,但是行业习惯这样做:/正则表达式/。
元字符 含义
* 0次1次或多次
+ 1次或多次
? 0次或1次
. 除了换行外的其他字符
| 或选择
{n} 正好n次
{n,} 不少于n次
{n,m} 区间,>=n,<=m
^或\A 正则的开始
$或\Z 正则的结束
\b 单词的边界
\B 单词边界以外
[] 其中任意一个
[^] 除了[]中的以外
() 作为一个整体
原子:一些特殊符号,如:* ’ ” + \等,需要使用 \ 来进行转义。
原子字符 含义 举例
\cx 匹配由x指明的控制字符 如 \cM匹配一个回车符,x的值必须为A~Z或a~z之一,否则将c视为匹配‘c’
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个指标符 在不使用表格的情况下在垂直方向按列对齐文本
\v 匹配一个垂直制表符
\d 0到9任意一个数字 等价于[0-9]
\D 除0到9之外的字符 等价于[^0-9]
\s 空白字符 等价于[\f\n\r\t\v]
\S 除了空白字符
\w 数字、字母或下划线 [0-9a-zA-Z]
\W 除了数字、字符或下划线 可以理解为特殊字符,如*、$等
模式修正符:在最后一个细线‘/’之后使用,如 /php/i
模式修正符 含义
i 不区分大小写
m 将字符视为多行
s 将字符串视为单行,换行符作为普通的字符
x 忽略空白
U 取消贪婪模式,等同于在数量符之后添加一个问号,比如 .*?
后向引用:使用()时,会将其相关的匹配存储到一个临时的缓存区,缓存区编号从1-99,使用 \1(“\1”)来获取缓存区内容,可以使用 ?: 或 ?= 或 ?! 来忽略相关的缓存内容。
/(windows)(linxu)\2/ 这样是使用第二个缓存区的内容,linux;
/(?:windows)(linux)\1/,忽略了第一缓存区的内容,linux。
贪婪模式:概念不好解释,直接上代码去理解
$str = '发财123发财发财456发财发财abc发财';
$pattern = '/发财.*发财/'; // 匹配始末发财中的内容
$pattern2 = '/发财.*?发财/'; // 匹配所有发财中的内容
$pattern3 = '/发财.*发财/U'; // 效果等同上一行
preg_match_all($pattern, $str, $matches);
preg_match_all($pattern2, $str, $matches2);
preg_match_all($pattern3, $str, $matches3);
var_dump($matches);
var_dump($matches2);
var_dump($matches3);
中文匹配:这个不常用到,知道要点即可。
- UTF-8汉字编码范围是:0x4e00–0x9fa5,使用 u 模式修正符使字符串被当成UTF-8。
- gb2312汉字编码范围是:0xb0–0xf7,0xa1–0xfe,使用 chr 将其转为字符串。
常用函数:preg_match、preg_match_all
preg_match返回0或者1,它在完成第一次匹配后停止搜索;preg_match_all会一直匹配目标到结束;如果如果发生错误preg_match()返回 FALSE。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 语法:
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )1
# 举例:
查找文本字符串"php":
<?php //模式分隔符后的"i"标记这是一个大小写不敏感的搜索 if (preg_match("/php/i", "PHP is the web scripting language of choice.")) { echo "查找到匹配的字符串 php。"; } else { echo "未发现匹配的字符串 php。"; } ?>1
2
3
4
5
6
7
8结果如下:
查找到匹配的字符串 php。
查找单词 "web":
模式中的 \b 标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配 * 单词的部分内容比如"webbing" 或 "cobweb"
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) { echo "aaa\n"; } else if(preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")){ echo "bbb\n"; }1
2
3
4
5结果如下:
aaa
bbb
参考资料
https://blog.csdn.net/yb546822612/article/details/90671244 (opens new window)
https://blog.csdn.net/xiaolinyui/article/details/134892835 (opens new window)
编辑 (opens new window)
上次更新: 2025/06/08, 09:36:22