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— 支