php中处理字符串模式需用正则表达式,主要函数包括:一、preg_match单次匹配;二、preg_match_all全局匹配;三、preg_replace简单替换;四、preg_replace_callback动态替换;五、preg_split正则分割。

如果在PHP中需要从字符串中提取特定模式的内容或对符合规则的文本进行替换,则必须借助正则表达式功能。PHP提供了多个内置函数支持正则匹配与替换操作,以下是具体实现方式:
一、使用preg_match进行单次匹配
preg_match函数用于执行一次正则匹配,返回布尔值表示是否找到匹配项,并可将捕获组结果存入指定数组。该函数适用于验证格式或提取首个匹配内容。
1、定义目标字符串,例如 $text = "联系电话:13812345678,邮箱:user@example.com";
2、编写正则表达式模式,如 $pattern = '/1[3-9]d{9}/' 用于匹配中国大陆手机号;
立即学习“PHP免费学习笔记(深入)”;
3、调用 preg_match($pattern, $text, $matches) ,若成功则 $matches[0] 存储完整匹配结果;
4、检查返回值是否为 1,只有返回1才表示成功匹配到内容;
二、使用preg_match_all进行全局匹配
当需提取字符串中所有符合正则规则的子串时,应使用preg_match_all函数。它会返回全部匹配项及其捕获组,适合批量提取场景。
1、设定文本内容,如 $content = "价格:¥99,折扣价:¥79.5,原价:¥129";
2、构造匹配数字及小数点的模式,例如 $regex = '/d+(?:.d+)?/';
3、执行 preg_match_all($regex, $content, $results) ,匹配结果按索引数组形式存储在 $results[0] 中;
4、遍历 $results[0] 即可获取每个匹配到的数值,注意该函数返回匹配总数,而非布尔值;
三、使用preg_replace进行简单替换
preg_replace函数依据正则表达式查找并替换所有匹配项,适用于统一修改文本中某类模式的内容,如清理HTML标签或格式化电话号码。
1、准备原始字符串,如 $str = "客服电话:0755-12345678 或 400-800-9999";
2、编写替换模式,例如 $replace_pattern = '/(d{4})-(d{8})/' 用于匹配4-8格式固话;
3、设定替换模板,如 '$1 $2' 表示将短横线替换为空格;
4、调用 $new_str = preg_replace($replace_pattern, '$1 $2', $str) 完成替换;
5、若未发生任何替换,函数返回原字符串,不会报错;
四、使用preg_replace_callback进行动态替换
当替换内容需根据匹配结果动态生成时,应使用preg_replace_callback函数。它接收回调函数作为参数,在每次匹配后执行该函数并返回替换值。
1、定义待处理字符串,如 $data = "编号#A123#和#B456#已入库";
2、设置匹配模式 $callback_pattern = '/#([A-Z]d+)#/' ,捕获字母加数字组合;
3、编写回调函数 function($matches) { return '[ID:' . strtoupper($matches[1]) . ']'; };
4、调用 preg_replace_callback($callback_pattern, 'callback_function_name', $data);
5、回调函数必须返回字符串,否则对应位置将被替换为空;
五、使用preg_split进行正则分割
preg_split函数允许按正则表达式规则将字符串切分为数组,比普通字符串分割更灵活,可用于解析复杂分隔符结构的文本。
1、设定源字符串,例如 $line = "apple, banana; cherry|date";
2、构造兼容多种分隔符的模式,如 $delim_pattern = '/[,;|\s]+/';
3、执行 $parts = preg_split($delim_pattern, $line, -1, PREG_SPLIT_NO_EMPTY);
4、启用 PREG_SPLIT_NO_EMPTY 标志可自动过滤空元素;
5、若模式无法匹配任何位置,函数返回包含原字符串的单元素数组;











