PHP正则表达式:完整指南与示例

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

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

开始课程

PHP中的正则表达式:从基础到进阶技术



正则表达式(regex)是一种用于搜索、替换和分析文本数据的强大工具。在PHP中,它们通过PCRE(Perl兼容正则表达式)函数集实现。本文将讲解正则表达式的基础知识,介绍关键函数,并提供实用的示例,帮助您自动化字符串处理。



1. PHP中用于正则表达式的基本函数



PHP提供了几个内置函数用于处理正则表达式。让我们看看其中最常用的几个。



preg_match() — 查找匹配

preg_match()函数检查字符串是否与给定的模式匹配。如果找到匹配则返回1,否则返回0。



<?php$text = "Привет, мир! PHP — это круто.";$pattern = "/PHP/";

if (preg_match($pattern, $text)) { echo "Слово 'PHP' найдено!";} else { echo "Совпадений нет.";}?>


如果需要获取匹配本身,请传递第三个参数——一个用于存储结果的数组:



<?php$text = "Мой email: user@example.com";$pattern = "/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/";

if (preg_match($pattern, $text, $matches)) { echo "Найден email: " . $matches[0];}?>


preg_replace() — 按模式替换

preg_replace()函数将所有与模式匹配的内容替换为指定的字符串。它类似于str_replace(),但支持正则表达式。



<?php$text = "Сегодня 15.03.2024, а завтра будет 16.03.2024";$pattern = "/(\\d{2})\\.(\\d{2})\\.(\\d{4})/";$replacement = "$3-$2-$1"; // 重新排列日期部分

echo preg_replace($pattern, $replacement, $text);// 输出:Сегодня 2024-03-15, а завтра будет 2024-03-16?>


preg_split() — 分割字符串

preg_split()函数根据正则表达式分割字符串。当分隔符可能不同时,这比explode()更方便。



<?php$text = "яблоко, груша; банан: апельсин";$pattern = "/[,;:]/"; // 分隔符:逗号、分号、冒号$fruits = preg_split($pattern, $text);

print_r($fruits);// Array ( [0] => яблоко [1] => груша [2] => банан [3] => апельсин )?>


2. 正则表达式的元字符和语法



为了有效使用正则表达式,有必要理解其语法。以下是基本的元字符:



  • . — 任意字符(除换行符外)
  • ^ — 字符串开头
  • $ — 字符串结尾
  • * — 0次或多次重复
  • + — 1次或多次重复
  • ? — 0次或1次重复
  • \\d — 数字(0-9)
  • \\w — 字母、数字或下划线
  • \\s — 空白字符
  • [abc] — 集合中的任意字符
  • (...) — 捕获组


示例:验证电话号码

<?php$phone = "+7 (123) 456-78-90";$pattern = "/^\\+7\\s\\(\\d{3}\\)\\s\\d{3}-\\d{2}-\\d{2}$/";

if (preg_match($pattern, $phone)) { echo "Номер телефона корректен!";} else { echo "Неверный формат номера.";}?>


3. 进阶技术和修饰符



修饰符会改变正则表达式的行为。它们写在结束斜杠之后。让我们看看最有用的几个:



  • i — 不区分大小写的搜索
  • m — 多行模式(^和$对每一行生效)
  • s — 点号包含换行符
  • u — 支

博客

书籍推荐