使用 preg_replace 替换文本
使用替换字符串和反向引用替换匹配内容。
使用 preg_replace 替换文本 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
preg_replace() 函数签名
preg_replace($pattern, $replacement, $subject) 返回替换所有匹配项后的 subject。传入 subject 数组即可一次处理多个字符串。
简单替换
将字符串中的所有数字替换为星号。
<?php
$result = preg_replace('/\d/', '*', 'Order #12345');
echo $result; // "Order #*****"替换中的反向引用
使用 $1、$2……(或 \1、\2)将捕获组插入替换字符串。
<?php
$result = preg_replace('/^(\w+)\s(\w+)$/', '$2, $1', 'John Smith');
echo $result; // "Smith, John"命名反向引用
命名捕获组可以在替换中通过 ${name} 引用。
<?php
$result = preg_replace(
'/(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})/',
'${day}/${month}/${year}',
'2025-06-15'
);
echo $result; // "15/06/2025"替换多个模式
传入模式数组和替换内容数组,即可一次处理多条规则。
<?php
$result = preg_replace(
['/foo/', '/bar/'],
['baz', 'qux'],
'foo and bar'
);
echo $result; // "baz and qux"限制参数
第 4 个参数限制替换次数。传入 -1 表示不限制次数(默认值)。
<?php
$result = preg_replace('/a/', 'X', 'banana', 2);
echo $result; // "bXnXna"计数参数
传入第 5 个变量,以接收实际执行的替换次数。
<?php
$count = 0;
$result = preg_replace('/e/', '3', 'hello everyone', -1, $count);
echo "$count replacements"; // "3 replacements"preg_replace_callback()
当替换逻辑较为复杂时,请使用 preg_replace_callback(),通过闭包处理每个匹配项。
<?php
$result = preg_replace_callback(
'/\d+/',
fn($m) => $m[0] * 2,
'Item: 5, Qty: 3'
);
echo $result; // "Item: 10, Qty: 6"移除 HTML 标签示例
使用简单的正则表达式移除所有 HTML 标签(生产环境中请使用 strip_tags())。
<?php
$clean = preg_replace('/<[^>]+>/', '', '<b>Hello</b> World');
echo $clean; // "Hello World"将字符串转换为 Slug
将标题转换为适合 URL 使用的 Slug。
<?php
function slugify(string $s): string {
$s = strtolower($s);
$s = preg_replace('/[^a-z0-9]+/', '-', $s);
return trim($s, '-');
}
echo slugify('Hello World!'); // "hello-world"性能说明
保持模式简单,避免灾难性回溯。对于复杂转换,请使用 preg_replace_callback,而不是叠加多次 preg_replace 调用。
与 str_replace 的区别
对于纯文本替换,str_replace 更快。只有在需要正则表达式模式的功能时,才使用 preg_replace。
总结
preg_replace 会替换模式的所有匹配项。使用反向引用($1)重用捕获组。替换逻辑具有动态性时,请使用 preg_replace_callback。
快速检查
如何在 preg_replace 的替换字符串中引用第一个捕获组?
常见问题解答
「使用 preg_replace 替换文本」课时是免费的吗?
是的 — 「使用 preg_replace 替换文本」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「使用 preg_replace 替换文本」这节课中我会学到什么?
使用替换字符串和反向引用替换匹配内容。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 preg_replace 替换文本」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 正则表达式语法基础
- 使用 preg_match 进行匹配
- 使用 preg_replace 替换文本
- 拆分字符串与实用模式