PHP 手册
后退 |  | 前进

# preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5)

preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换

## 说明

mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )

本函数的行为几乎和 preg_replace() 一样，除了不是提供一个 replacement 参数，而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数，并返回用于替换的字符串。

例子 1. preg_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 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
?>`

You'll often need the callback function for a preg_replace_callback() in just one place. In this case you can use create_function() to declare an anonymous function as callback within the call to preg_replace_callback(). By doing it this way you have all information for the call in one place and do not clutter the function namespace with a callback functions name not used anywhere else.

例子 2. preg_replace_callback() 和 create_function()

`<?php /* 一个 UNIX 风格的命令行过滤器，将每个段落开头的 * 大写字母转换成小写字母 */ $fp = fopen("php://stdin", "r") or die("can't read stdin"); while (!feof($fp)) { $line = fgets($fp); $line = preg_replace_callback( '|<p>\s*\w|', create_function( // 这里使用单引号很关键， // 否则就把所有的 $ 换成 \$ '$matches', 'return strtolower($matches[0]);' ), $line ); echo $line; } fclose($fp); ?>`

参见 preg_replace() 和 create_function()。

后退 | 起点 | 前进
preg_quote | 上一级 | preg_replace