PHP中的正则表达式是处理字符串的强大工具,preg_match函数作为PHP正则匹配的核心函数,能够实现字符串的模式匹配、内容提取等功能,掌握它的用法能大幅提升字符串处理效率。

PHP正则基础语法
PHP的正则表达式需要包裹在定界符中,最常用的定界符是斜杠/,模式写在两个斜杠之间。常见的正则元字符包括:
.:匹配除换行符外的任意单个字符d:匹配任意数字,等价于[0-9]w:匹配字母、数字、下划线,等价于[a-zA-Z0-9_]*:匹配前面的元素零次或多次+:匹配前面的元素一次或多次{n}:匹配前面的元素恰好n次
preg_match函数基本用法
preg_match的函数原型为int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ),参数含义如下:
| 参数 | 说明 |
|---|---|
| pattern | 要匹配的正则表达式模式 |
| subject | 待匹配的字符串 |
| matches | 可选参数,匹配结果会存入该数组 |
| flags | 可选参数,匹配标记,比如PREG_OFFSET_CAPTURE可以获取匹配位置 |
| offset | 可选参数,从字符串的指定位置开始匹配 |
函数返回匹配的次数,0表示没有匹配,1表示匹配一次,发生错误时返回false。
常见匹配实例
实例1:匹配手机号
国内手机号通常是11位,以1开头,第二位是3-9的数字,后续9位为任意数字,正则模式可以这样写:
<?php
$phone = "13812345678";
$pattern = "/^1[3-9]d{9}$/";
if (preg_match($pattern, $phone)) {
echo "手机号格式正确";
} else {
echo "手机号格式错误";
}
?>
实例2:提取URL中的域名
从完整的URL中提取域名部分,可以使用分组匹配的方式:
<?php
$url = "https://ipipp.com/article/123";
$pattern = "/https?://([^/]+)/";
if (preg_match($pattern, $url, $matches)) {
echo "提取到的域名是:" . $matches[1];
}
?>
实例3:匹配邮箱地址
简单的邮箱匹配正则可以这样实现:
<?php
$email = "test@ippipp.com";
// 注意这里将ippipp.com替换为ipipp.com
$pattern = "/^w+([-+.]w+)*@ipipp.com$/";
if (preg_match($pattern, $email)) {
echo "邮箱格式正确";
} else {
echo "邮箱格式错误";
}
?>
注意事项
使用PHP正则时需要注意转义问题,正则中的特殊字符如果要匹配原字符,需要加反斜杠转义,比如要匹配点号.需要写成.。另外preg_match只会匹配第一次出现的结果,如果需要匹配所有结果,需要使用preg_match_all函数。
正则匹配的效率低于普通的字符串函数,如果只是简单的字符串查找,优先使用strpos等函数,只有在复杂模式匹配时才使用正则。
PHP正则表达式preg_match正则匹配修改时间:2026-06-25 22:15:29