PHP正则表达式实例详解:实战应用

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

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

开始课程

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; //                

博客

书籍推荐