PHP 正则表达式完全指南
PHP提供了两种风格的正则表达式支持:PCRE(Perl Compatible Regular Expressions)和POSIX。由于POSIX已经废弃,本指南将专注于PCRE风格的正则表达式使用。
1. 基础知识
1.1 正则表达式函数
PHP中最常用的正则表达式函数:
// 查找匹配
preg_match() // 返回第一个匹配
preg_match_all() // 返回所有匹配
// 替换
preg_replace() // 替换匹配的内容
preg_replace_callback() // 使用回调函数替换
// 分割
preg_split() // 使用正则表达式分割字符串
// 过滤
preg_grep() // 返回匹配模式的数组元素
1.2 基本语法示例
<?php
// 1. 基本匹配
$text = "Hello, my phone is 123-456-7890";
// 查找第一个匹配
if (preg_match('/\d+/', $text, $matches)) {
echo "Found: " . $matches[0]; // 输出: 123
}
// 查找所有匹配
if (preg_match_all('/\d+/', $text, $matches)) {
print_r($matches[0]); // 输出: Array([0]=>123 [1]=>456 [2]=>7890)
}
// 2. 使用不同分隔符
// 使用 / 分隔符
$pattern1 = '/pattern/';
// 使用 # 分隔符
$pattern2 = '#pattern#';
// 使用 ~ 分隔符
$pattern3 = '~pattern~';
2. 模式修饰符
PHP支持多种模式修饰符,用于改变匹配行为:
<?php
$text = "Hello WORLD\nNew Line";
// i - 不区分大小写
preg_match('/hello/i', $text); // 匹配成功
// m - 多行模式
preg_match('/^New/m', $text); // 匹配成功
// s - 点号匹配所有字符(包括换行)
preg_match('/Hello.*Line/s', $text); // 匹配成功
// x - 忽略空白字符和注释
$pattern = '/
\d+ # 匹配数字
\s* # 可选的空白字符
\w+ # 匹配单词
/x';
// u - Unicode模式
preg_match('/\p{Han}/u', '你好'); // 匹配中文字符
3. 常用匹配模式
3.1 字符匹配
<?php
$text = "PHP 7.4 is awesome! Price: $99.99";
// 匹配数字
preg_match_all('/\d+/', $text