php正则表达式用定界符(如/或#)包裹模式,配合修饰符(i/m/s/u)控制行为,核心函数各司其职:preg_match()验证、preg_match_all()提取、preg_replace()替换、preg_split()分割;需注意转义用户输入、避免回溯爆炸,并用u修饰符处理unicode。

PHP 正则表达式本质是用一套规则描述“想匹配什么样的字符串”,再交给 preg_ 系列函数去执行。它不难上手,关键在理解定界符、模式写法和函数分工。
定界符和基本格式
正则表达式必须用一对**定界符**包裹,最常用的是 /,比如 /abc/。如果模式里本身含 /(如匹配 URL),可换用 # 或 ~ 避免大量转义:#https?://[^\s]+# 比 /https?:\/\/[^\s]+/ 更清晰。
定界符后可加**修饰符**,常见有:
– i:忽略大小写(/PHP/i 匹配 php、Php、PHP)
– m:多行模式(^ 和 $ 匹配每行首尾)
– s:单行模式(. 可匹配换行符)
– u:UTF-8 模式(处理中文、emoji 必加)
核心函数各干啥
不用死记,按需求选函数:
-
preg_match():只找第一个匹配,适合验证(如邮箱、手机号)。返回
1(成功)、0(失败)、false(出错) - preg_match_all():找全部匹配,适合提取(如抓所有链接、电话号)。返回匹配总数
-
preg_replace():把匹配到的内容替换成别的字符串,支持反向引用(如把
2026-10-01改成01/10/2026) -
preg_split():按规则切分字符串,比
explode()更灵活(如用/[,;\s]+/切分逗号、分号或空格)
写模式的几个实用要点
别一上来就写长串,从简单原子开始组合:
- 普通字符直接写:
abc就匹配字面 “abc” - 常用元字符要记住:
.(任意单字符)、d(数字)、w(字母数字下划线)、s(空白) - 量词控制次数:
+(至少1次)、*(0次或多次)、?(0次或1次)、{2,5}(2到5次) - 用
^和$锚定边界,避免部分匹配:邮箱验证必须写/^[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,}$/i,否则"abc@def.comxxx"也会被误判成功 - 中文、emoji 等 Unicode 字符,务必加
u修饰符,否则可能乱码或匹配失败
安全与调试小提醒
实际开发中容易踩坑的地方:
- 用户输入的内容(如搜索关键词)若直接拼进正则,需先用
preg_quote($str, '/')转义特殊字符,防止注入或语法错误 - 复杂嵌套量词(如
(a+)+b)可能引发回溯爆炸(ReDoS),测试时用超长恶意字符串试试响应是否卡死 - 写完正则,用在线工具(如 regex101.com)粘贴 PHP 模式 + 示例文本,看分组、匹配过程是否符合预期
- 优先用
d而非[0-9],用s而非[ \t\n\r\f\v],更简洁且语义明确
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











