PHP  
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
search for in the  
<preg_quotepreg_replace>
Last updated: Mon, 16 Jul 2012

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_quotepreg_replace>
 Last updated: Mon, 16 Jul 2012
 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: http://manual.phpv.net/
Last updated: Thu Jul 7 19:13:47 2005 CST