在 PHP 开发中,preg_replace
是处理正则表达式替换的核心函数,尤其适用于涉及模式匹配、动态替换和多规则处理的复杂场景。本文将通过实际案例和进阶技巧,解析如何高效利用该函数完成复杂字符串操作。
preg_replace
的基本语法为:
mixed preg_replace(mixed $pattern, mixed $replacement, mixed $subject [, int $limit = -1 [, int &$count ]])
$pattern
:正则表达式或数组,定义搜索模式。$replacement
:替换内容或数组,支持静态文本或动态引用(如反向引用 $1
)。$subject
:目标字符串或数组,支持批量处理。示例:将字符串中所有数字替换为星号:
$text = "ID: 123, Code: 456";
$result = preg_replace('/\d/', '*', $text);
// 输出:ID: ***, Code: ***
当需要同时应用多个替换规则时,可将 $pattern
和 $replacement
定义为数组。数组元素按顺序匹配,且可通过 ksort
对键名排序以控制优先级。
示例:替换特定单词并调整顺序:
$text = "The quick brown fox";
$patterns = ["/quick/", "/brown/", "/fox/"];
$replacements = ["slow", "black", "bear"];
// 未排序时替换结果可能不符合预期
ksort($patterns);
ksort($replacements);
$result = preg_replace($patterns, $replacements, $text);
// 输出:The slow black bear
注意:
$replacement
数组元素少于 $pattern
,缺失部分以空字符串填充。$pattern
是数组而 $replacement
是字符串,所有模式均用同一字符串替换。通过正则表达式的捕获组,可在替换内容中动态引用匹配结果。使用 $n
或 \n
表示第 n
个捕获组(推荐 $n
以避免歧义)。
$date = "2025-03-01";
$pattern = "/(\d{4})-(\d{2})-(\d{2})/";
$replacement = "$2/$3/$1";
$result = preg_replace($pattern, $replacement, $date);
// 输出:03/01/2025
当反向引用后紧跟数字时,需用 \${n}
明确边界:
$text = "Item11";
$pattern = "/(Item)(\d+)/";
$replacement = "\${1}_\${2}";
$result = preg_replace($pattern, $replacement, $text);
// 输出:Item_11
/e
修饰符(已弃用)旧版本 PHP 中,/e
允许将 $replacement
当作 PHP 代码执行,但存在安全风险。建议改用 preg_replace_callback
。
/i
)$text = "Hello WORLD";
$result = preg_replace("/world/i", "PHP", $text);
// 输出:Hello PHP
移除 HTML 标签、JavaScript 代码和空白字符:
$html = " Hello
";
$patterns = [
'/