如何在PHP中使用正则表达式进行查找替换(4)


<?php
$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
                   '/^\s*{(\w+)}\s*=https://www.jb51.net/');
$replace = array ('\3/\4/\1\2', '$\1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27');
?>


使用修饰符'e':

复制代码 代码如下:


<?php
$html_body = "<p><span>hello</span></p>";
//会输出:<P><SPAN>hello</SPAN></P>
echo htmlspecialchars(preg_replace("/(<\/?)(\w+)([^>]*>)/e",
             "'\\1'.strtoupper('\\2').'\\3'",
             $html_body));
?>


剥离空白字符:

复制代码 代码如下:


<?php
$str = 'foo   o';
$str = preg_replace('/\s\s+/', ' ', $str);
// 将会改变为'foo o'
echo $str;
?>


使用参数count:

复制代码 代码如下:


<?php
$count = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);
//等价于echo preg_replace('/\d|\s/', '', 'xp 4 to', -1 , $count);
echo $count; //3
?>


7.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中匹配到的结果。回调函数返回真正参与替换的字符串。
你可能经常会需要callback函数而 仅用于 preg_replace_callback()一个地方的调用。在这种情况下,你可以使用匿名函数来定义一个匿名函数作为preg_replace_callback()调用时的回调。 这样做你可以保留所有 调用信息在同一个位置并且不会因为一个不在任何其他地方使用的回调函数名称而污染函数名称空间。
subject:
要搜索替换的目标字符串或字符串数组。
limit:
对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
count:
如果指定,这个变量将被填充为替换执行的次数。
示例:
preg_replace_callback() 和 create_function():

复制代码 代码如下:


<?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);
}
/**
 *将会输出:
 *April fools day is 04/01/2003
 *Last christmas was 12/24/2002
 */
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            "next_year",
            $text);
//使用create_function
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            create_function(
            '$matches',
            'return $matches[1].($matches[2]+1);'
            ),
            $text);
?>

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/54b8556ea7b527eb53a0d74c66bee611.html