PHP Preg_replace用于特定文本的所有实例?

时间:2011-10-05 06:59:58

标签: php

我有以下文本,想要用##替换所有开始和结束的instace,如何为preg_replace php准备正则表达式。 实施例

  

我们遇到问题## anytext ##并会尽快更新   关于这个问题## textsomethingelse ##

我的问题如何用特定文本替换## anytext ##的所有实例?

2 个答案:

答案 0 :(得分:3)

您可能需要使用preg_replace_callback执行此任务。

一个例子:

<?php
$replacements = array(
    'anytext' => 'ANYTEXT',
    'else' => 'ELSE',
);
echo preg_replace_callback(
    '/##(.*?)##/',
    create_function(
        '$matches',
        'global $replacements; return $replacements[ $matches[1] ];'
    ),
    'We are encountering a problem ##anytext## and will update you soon regarding this problem ##else##'
);

注意:此示例使用create_function,但如果您使用的是PHP&gt; = 5.3,则最好使用闭包。

答案 1 :(得分:-1)

想知道为什么全局标志不适用于简单的preg_replace。像这样:

<?php
$string = 'We are encountering a problem ##anytext## and will update you soon regarding this problem ##textsomethingelse##';

$pattern = '/##anytext##/g';
$replacement = 'with the service';
echo preg_replace($pattern, $replacement, $string);
?>

这将输出:

We are encountering a problem with the service and will update you soon regarding this problem ##textsomethingelse##