PHP正则表达式实例详解:实战应用
正则表达式(regex)是一种用于搜索、替换和分析文本的强大工具。在PHP中,它们通过PCRE(Perl兼容正则表达式)函数集实现。没有它们,表单验证、日志解析或字符串模板替换将难以想象。
本文将详细讲解PHP正则表达式实例,您可以直接应用于自己的项目中。我们不会深入理论——只关注实践、代码和真实场景。
1. PHP中处理正则表达式的核心函数
PHP中有三个关键函数可覆盖95%的任务:
preg_match()— 搜索第一个匹配项。preg_match_all()— 搜索所有匹配项。preg_replace()— 按模式替换。preg_split()— 按模式分割字符串。
所有函数都需要三个参数:模式(pattern)、字符串(subject)和可选标志。
示例1:验证电子邮件
<?php$email = "user@example.com";$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) { echo "Email有效";} else { echo "Email无效";}?>解析模式:/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/
^— 字符串开头。[a-zA-Z0-9._%+-]+— 一个或多个允许的字符。@— 字面字符@。[a-zA-Z0-9.-]+— 域名。\\.— 点(转义)。[a-zA-Z]{2,}— 域名后缀(至少2个字母)。$— 字符串结尾。
示例2:从HTML中提取所有链接
<?php$html = '<a href="https://pythonlib.ru">网站</a> 和 <a href="/about">关于我们</a>';$pattern = '/href="([^"]+)"/';
preg_match_all($pattern, $html, $matches);
print_r($matches[1]); // 输出链接数组?>这里([^"]+)是一个捕获组,用于查找href属性中除引号外的所有内容。
2. 修饰符及其实际应用
修饰符改变正则表达式的行为。它们放在结束斜杠(/)之后。
i— 不区分大小写搜索。m— 多行模式(^和$作用于每一行)。s— 点号包含换行符。U— 懒惰模式(默认贪婪)。u— UTF-8支持。
示例3:不区分大小写搜索单词
<?php$text = "PHP是一种强大的语言。php被广泛使用。";$pattern = "/php/i";
preg_match_all($pattern, $text, $matches);echo count($matches[0]); // 输出2?>示例4:处理西里尔字母(UTF-8)
<?php$text = "Привет, мир!";$pattern = "/[а-яё]+/ui"; // u — UTF-8, i — 不区分大小写
preg_match_all($pattern, $text, $matches);print_r($matches[0]); // ['Привет', 'мир']?>没有u修饰符,西里尔字母将无法正确处理,因为PHP会将每个字节视为单独字符。
3. 使用正则表达式进行字符串替换和分割
preg_replace()函数允许按模式替换字符串部分。而preg_split()则像explode一样分割字符串,但可以使用正则表达式。
示例5:清除文本中的HTML标签
<?php$html = "<h1>标题</h1><p>包含<b>粗体</b>词的文本</p>";$clean = preg_replace("/<[^>]+>/", "", $html);echo $clean; //