PHP正则表达式实例:实战指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP正则表达式:从理论到实践

\n\n

正则表达式(regex或regexp)是一种强大的工具,用于根据指定模式搜索、替换和验证字符串。在PHP中,它们通过PCRE(Perl兼容正则表达式)函数集实现,能够解决从电子邮件验证到HTML解析的各种复杂任务。在本文中,我们将解析语法、主要函数,并介绍每个PHP开发人员都会用到的实用示例。

\n\n

1. PHP正则表达式语法基础

\n\n

PHP中的任何正则表达式都包含在分隔符中(通常为斜杠/)。在结束分隔符之后,可以指定修饰符——用于改变搜索行为的标志。

\n\n
$pattern = '/模式/修饰符';
\n\n

基本元字符:

\n
    \n
  • . — 任意单个字符(换行符除外)
  • \n
  • * — 前一个字符的零次或多次重复
  • \n
  • + — 一次或多次重复
  • \n
  • ? — 零次或一次重复(使量词变为懒惰模式)
  • \n
  • ^ — 字符串开头
  • \n
  • $ — 字符串结尾
  • \n
  • \\d — 数字(0-9)
  • \n
  • \\w — 字母、数字或下划线
  • \n
  • \\s — 空白字符
  • \n
  • [] — 字符类(例如[a-z])
  • \n
  • () — 捕获组
  • \n
\n\n

常用修饰符:

\n
    \n
  • i — 不区分大小写的搜索
  • \n
  • m — 多行模式(^和$作用于每一行)
  • \n
  • u — UTF-8支持(处理西里尔字母时必需)
  • \n
  • s — 点号也匹配换行符
  • \n
\n\n

2. preg_match()函数:搜索匹配项

\n\n

preg_match()是最常用的函数。它检查字符串是否与模式匹配,并返回1(匹配)或0(不匹配)。第三个参数是一个数组,用于存储找到的匹配项。

\n\n

示例1. 验证电子邮件地址

\n
<?php\n$email = "user@example.com";\n$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/';\n\nif (preg_match($pattern, $email)) {\n    echo "电子邮件有效";\n} else {\n    echo "电子邮件无效";\n}\n// 输出:电子邮件有效\n?>
\n\n

示例2. 从字符串中提取数据

\n
<?php\n$text = "我的号码:+7 (999) 123-45-67";\n$pattern = '/\\+7\\s*\\(\\d{3}\\)\\s*\\d{3}-\\d{2}-\\d{2}/u';\n\nif (preg_match($pattern, $text, $matches)) {\n    echo "找到号码:" . $matches[0];\n}\n// 输出:找到号码:+7 (999) 123-45-67\n?>
\n\n

注意:如果字符串中包含西里尔字母或Unicode特殊字符,则必须使用修饰符u。

\n\n

3. preg_replace()函数:按模式替换

\n\n

preg_replace()在字符串中查找所有与模式匹配的内容,并将其替换为指定的文本。可以使用捕获组$1、$2等来插入原始文本的部分内容。

\n\n

示例3. 格式化电话号码

\n
<?php\n$phone = "89991234567";\n$pattern = '/(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})/';\n$replacement = '+7 ($2) $3-$4-$5';\n\n$formatted = preg_replace($pattern, $replacement, $phone);\necho $formatted; // +7 (999) 123-45-67\n?>
\n\n

示例4. 清理HTML标签(保留允许的标签)

\n
<?php\n$html = "<b>粗体</b> <script>alert('xss')</script> 文本";\n$pattern = '/<\\s*\\/?\\s*(?!b|i|u|a\\b)[^>]*>/ui';\n\n$clean = preg_replace($pattern, '', $html);\necho $clean; // <b>粗体</b> 文本\n?><                

博客

书籍推荐