2021年8月25日 星期三

(PHP) preg_replace_callback() 函數

preg_replace_callback 函數: 執行一個正則表達式. 搜索. 並且使用一個回調進行替換。

語法
mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )
 
這個函數的行為除了可以指定一個 callback. 替代 replacement 進行替換字符串的計算,其他方面相同於 preg_replace()
 
參數說明
    $pattern: 要搜索的模式,可以是字符串. 或一個字符串數組。
    $callback: 一個回調函數; 調用時函數得到的參數是從 subject中匹配到的結果。
    $subject: 要搜索替換的目標字符串或字符串數組。
    $limit: 可選,對於每個模式用於每個 subject 字符串的最大可替換次數。默認是-1(無限制)。
    $count: 可選,為替換執行的次數。
 
返回值
如果 subject是一個數組, preg_replace_callback()返回一個數組;
其他情況返回字符串。
錯誤發生時返回 NULL。
 
如果找到了匹配,返回替換後的目標字符串(或字符串數組);
其他情況subject 將會無變化返回。

實例

<?php
// 將文本中的年份增加一年.
$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 preg_replace_callback( "|(\d{2}/\d{2}/)(\d{4})|", "next_year", $text); 
?>
執行結果如下所示:
April fools day is 04/01/2003
Last christmas was 12/24/2002

沒有留言:

張貼留言

(Centos-7s) 更新: 網卡名稱改回 eth0 的方法

將 CentOS 7 網卡名稱修改, 用回 Eth0 的方法:   1) # vi /etc/sysconfig/grub 內容大概是這樣:   GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release...