2026-06-02 02:28:40
PHP正则表达式通过preg系列函数实现字符串的高效处理,结合元字符、量词、修饰符等规则,可完成匹配、查找、替换和分割操作。以下是核心语法与实践指南:
一、核心函数PHP提供4个主要函数处理正则表达式:
preg_match($pattern, $string, $matches)匹配一次,返回0(失败)或1(成功),匹配结果存入$matches数组。
$string = "PHP 8.2";$pattern = '/d+.d+/'; // 匹配版本号if (preg_match($pattern, $string, $matches)) { echo "版本号: " . $matches[0]; // 输出: 8.2}preg_match_all($pattern, $string, $matches)匹配所有符合条件的结果,返回匹配次数,结果存入多维$matches数组。
$string = "a1 b2 c3";$pattern = '/[a-z]d/';preg_match_all($pattern, $string, $matches);print_r($matches[0]); // 输出: Array ( [0] => a1 [1] => b2 [2] => c3 )preg_replace($pattern, $replacement, $string)替换匹配内容,返回替换后的字符串。
$string = "2023-01-15";$pattern = '/d{4}-d{2}-d{2}/';$newString = preg_replace($pattern, "YYYY-MM-DD", $string);echo $newString; // 输出: YYYY-MM-DDpreg_split($pattern, $string)按模式分割字符串,返回数组。
$string = "apple,banana;orange";$parts = preg_split('/[,;]/', $string);print_r($parts); // 输出: Array ( [0] => apple [1] => banana [2] => orange )分隔符模式需用分隔符包围(常用/),也可用#或~避免转义冲突。
$pattern = '#d+#'; // 匹配数字元字符
.:匹配任意非换行符字符。
^:匹配字符串开头。
$:匹配字符串结尾。
*:匹配前字符0次或多次。
+:匹配前字符1次或多次。
?:匹配前字符0次或1次。
[]:字符集(如[a-z]匹配小写字母)。
[^]:反义字符集(如[^0-9]匹配非数字)。
|:或逻辑(如cat|dog匹配"cat"或"dog")。
():分组捕获(如(ab)+匹配"ab"、"abab")。
量词
{n}:精确匹配n次(如d{3}匹配3位数字)。
{n,}:至少匹配n次(如w{2,}匹配至少2个单词字符)。
{n,m}:匹配n到m次(如s{1,3}匹配1到3个空白字符)。
预定义字符类
d:数字([0-9])。
D:非数字([^0-9])。
s:空白字符(空格、制表符、换行符)。
S:非空白字符。
w:单词字符([a-zA-Z0-9_])。
W:非单词字符。
修饰符放在分隔符后,改变匹配行为:
i:不区分大小写(如/hello/i匹配"Hello")。
m:多行模式(^和$匹配每行开头/结尾)。
s:点号匹配换行符(如/.*./s匹配跨行文本)。
u:UTF-8支持(处理中文等多字节字符)。
U:非贪婪模式(默认贪婪,*?或+?可显式指定)。
$string = "Line1nLine2";$pattern = '/^Line./m'; // 多行模式匹配每行开头preg_match_all($pattern, $string, $matches);print_r($matches[0]); // 输出: Array ( [0] => Line1 [1] => Line2 )转义特殊字符匹配元字符本身需用转义(如/./匹配句点)。
贪婪与非贪婪模式默认贪婪(如/.*./匹配尽可能多字符),加?变为非贪婪(如/.*?./)。
回溯陷阱避免嵌套量词(如/(a+)+/),可能导致性能问题。
修饰符选择根据需求选择修饰符(如处理多行文本用m,中文用u)。
安全测试使用工具(如
验证邮箱格式
$email = "user@example.com";$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/u';if (preg_match($pattern, $email)) { echo "邮箱有效";}提取URL参数
$url = "清理HTML标签
$html = "<p>Hello <b>World</b></p>";$clean = preg_replace('/<[^>]*>/', '', $html);echo $clean; // 输出: Hello World通过掌握上述规则和实践,可高效利用PHP正则表达式处理文本验证、提取和替换等任务。