(PHP 5 >= 5.4.1, PHP 7, PHP 8)
mb_ereg_replace_callback — 使用回呼函式執行多位元組支援的正規表示式搜尋和取代
$pattern
,$callback
,$string
,$options
= null
在 string
中搜尋符合 pattern
的字串,然後將符合的文字替換為 callback
函式的輸出。
此函式的行為幾乎與 mb_ereg_replace() 相同,除了不是使用 replacement
參數,而是指定一個 callback
參數。
pattern
正規表示式模式。
pattern
中可以使用多位元組字元。
callback
一個回呼函式,它將被呼叫並傳入一個在 string
字串中符合元素的陣列。此回呼函式應回傳替換字串。
您通常只需要在一個地方使用 mb_ereg_replace_callback() 的 callback
函式。在這種情況下,您可以使用匿名函式在呼叫 mb_ereg_replace_callback() 中宣告回呼函式。透過這種方式,您可以將呼叫的所有資訊都放在一個地方,並且不會讓函式命名空間中充斥著其他地方沒有使用的回呼函式名稱。
string
正在檢查的 字串。
options
搜尋選項。有關說明,請參見 mb_regex_set_options()。
版本 | 說明 |
---|---|
8.0.0 |
options 現在可以為 null。 |
7.1.0 | 此函式會檢查 string 是否對目前的編碼有效。 |
範例 #1 mb_ereg_replace_callback() 範例
<?php
// 這段文字是在 2002 年使用的
// 我們想將其更新到 2003 年
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// 回呼函式
function next_year($matches)
{
// 與往常一樣:$matches[0] 是完整的匹配
// $matches[1] 是第一個子模式的匹配
// 以 '(...)' 括起來,依此類推
return $matches[1].($matches[2]+1);
}
echo mb_ereg_replace_callback(
"(\d{2}/\d{2}/)(\d{4})",
"next_year",
$text);
?>
上述範例將輸出
April fools day is 04/01/2003 Last christmas was 12/24/2002
範例 #2 使用匿名函式的 mb_ereg_replace_callback()
<?php
// 這段程式碼寫於 2002 年
// 我們希望將它更新至 2003 年
$text = "愚人節是 04/01/2002\n";
$text.= "去年聖誕節是 12/24/2001\n";
echo mb_ereg_replace_callback(
"(\d{2}/\d{2}/)(\d{4})",
function ($matches) {
return $matches[1].($matches[2]+1);
},
$text);
?>
注意事項:
此函式會使用內部編碼或 mb_regex_encoding() 指定的字元編碼。