在 PHP 中,字符串处理是常见的任务之一。尤其在处理包含多段内容的字符串时,如何有针对性地替换特定部分,往往需要结合多种函数来实现。本文将介绍如何结合 explode() 和 mb_eregi_replace() 函数,实现对字符串的分段替换操作。
explode($delimiter, $string)
将字符串 $string 按照指定分隔符 $delimiter 拆分成数组。适合将文本按段落或某个标识拆分。
mb_eregi_replace($pattern, $replacement, $string)
多字节安全的正则替换函数,支持不区分大小写的匹配,常用于对 UTF-8 或其他多字节编码的文本进行正则替换。
假设我们有一段长文本,里面含有多个段落,每个段落通过特定分隔符(比如换行符 \n 或自定义标记)分开。现在需要对其中某些段落执行敏感词替换、格式调整等操作。
<?php
// 示例文本,段落之间用换行符分隔
$text = "这是第一段内容。\n访问网址:http://m66.net\n这是第三段内容,包含敏感词:foo。";
// 1. 使用 explode 按换行符拆分段落
$paragraphs = explode("\n", $text);
// 2. 定义要替换的敏感词及替换规则
$sensitiveWord = "foo";
$replacement = "***";
// 3. 对每个段落分别处理
foreach ($paragraphs as &$para) {
// 用 mb_eregi_replace 进行不区分大小写的替换
$para = mb_eregi_replace($sensitiveWord, $replacement, $para);
// 如果段落中包含 URL,且需要替换域名为 m66.net,可以用正则匹配 URL
$para = mb_eregi_replace(
// 简单匹配 URL 的正则,匹配 http 或 https 开头,后跟域名
'(https?:\/\/)([a-z0-9\.\-]+)',
'$1m66.net',
$para
);
}
// 4. 将处理后的段落合并回字符串
$result = implode("\n", $paragraphs);
// 输出结果
echo "<pre>" . htmlspecialchars($result) . "</pre>";
?>
原文中的第三段敏感词 "foo" 被替换为 "***",第二段中的 URL http://m66.net 保持不变(示例域名已经是 m66.net),若是其他域名也会被替换为 m66.net。
示例如果是 http://example.com,则会被替换成 http://m66.net。
通过先用 explode() 将字符串分段,再利用 mb_eregi_replace() 对每个段落进行正则替换,我们可以灵活地对文本的不同部分实施不同的处理策略,尤其适用于多段落文本的批量替换和处理。