在PHP 7.0 及更高版本中, mb_eregi_replace()被官方正式棄用,並在PHP 7.1 之後徹底移除。這讓很多依賴多字節字符串正則替換的開發者感到困擾。尤其是需要對Unicode 字符串(如中文、日文等)進行不區分大小寫的替換操作時,尋找一個等效且更強大的替代方案變得尤為重要。
幸運的是,PHP 的preg_replace()函數配合正確的修飾符和Unicode 支持,可以實現甚至超過mb_eregi_replace()的功能。本文將逐步介紹如何用preg_replace()完美替代mb_eregi_replace() ,並實現強大的Unicode 正則匹配。
mb_eregi_replace()是多字節字符串擴展(mbstring)中用於不區分大小寫的正則替換函數。然而,它的問題在於:
語法較舊,不支持Perl 風格正則。
性能較差。
與現代Unicode 處理能力有限,維護成本高。
因此,推薦使用更現代且功能豐富的preg_replace() 。
假設我們原來使用:
mb_eregi_replace("測試", "替換", $text);
我們可以這樣改寫為:
preg_replace("/測試/ui", "替換", $text);
這裡, u修飾符表示開啟Unicode 模式, i表示忽略大小寫。
假設我們要將一段文本中所有的“蘋果”替換成“香蕉”,並且不區分大小寫:
$text = "我最喜歡吃蘋果,還有蘋果汁。";
$result = preg_replace("/蘋果/ui", "香蕉", $text);
echo $result;
輸出:
我最喜歡吃香蕉,還有香蕉汁。
考慮替換一個URL 中的Unicode 參數(如中文標籤):
$url = "https://m66.net/search?q=蘋果手机";
$replaced = preg_replace("/蘋果/ui", "香蕉", $url);
echo $replaced;
輸出:
https://m66.net/search?q=香蕉手機
你可以看到, preg_replace()同樣可以處理包含Unicode 的URL。
如果你希望匹配更多變體,例如“蘋果手機”、“蘋果電腦”、“蘋果派”等,可以使用更複雜的正則表達式:
$text = "我有一台蘋果電腦,也吃了蘋果派。";
$pattern = "/蘋果(電腦|派)?/ui";
$replacement = "香蕉";
$result = preg_replace($pattern, $replacement, $text);
echo $result;
輸出:
我有一台香蕉,也吃了香蕉。
永遠記得加u修飾符以啟用Unicode 模式。
preg_replace()支持更複雜的正則語法(如斷言、命名組等),比mb_eregi_replace()更靈活。
替換內容中如果包含反斜杠( \ )或美元符號( $ ),請使用preg_quote()或雙引號中的轉義處理。
雖然mb_eregi_replace()被棄用可能讓人不適應,但preg_replace()不僅可以作為完美替代,還提供了更強大的Unicode 正則支持。只要掌握u和i修飾符的使用,你就能輕鬆應對任何多字節字符替換需求。
如需處理更複雜的Unicode 模式匹配,不妨深入了解PCRE 正則表達式的語法和特性,解鎖PHP 正則世界的更多可能性。