在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()對每個段落進行正則替換,我們可以靈活地對文本的不同部分實施不同的處理策略,尤其適用於多段落文本的批量替換和處理。