2

我有这样一句话:

{pattern} test {pattern} how r u {pattern}

如何{pattern}用不同的值替换,例如

{AAA} test {BBB} how r u {CCC}
4

7 回答 7

5

如果您希望每次都用其他东西替换相同的模式,您可以考虑使用preg_replace_callback(). 在每次匹配时,都会执行一个函数,并且您可以在每次调用时返回不同的字符串:

$s = '{pattern} test {pattern} how r u {pattern}';

// this gets called at every match    
function replace_pattern($match)
{
    // list of replacement strings $a and a looping counter $i
    static $a = array('AAA', 'BBB', 'CCC');
    static $i = 0;

    // return current replacement string and increase counter
    return $a[$i++ % count($a)];
}

echo preg_replace_callback('/{pattern}/', 'replace_pattern', $s);

此解决方案循环替换字符串,因此它将替换为 AAA、BBB、CCC、AAA(再次)等。您希望采用的确切策略可能不同。

第二个参数preg_replace_callback()也可以是一个闭包(> = 5.3)

此外,与使用带有static声明的常规函数​​不同,使用对象进行状态管理可能更合适。

于 2012-10-17T07:11:56.187 回答
2

您可以使用以下代码:

$str = '{pattern} test {pattern} how r u pattern {pattern}';
$repl = array('AAA', 'BBB', 'CCC');
$tok = preg_split('~(?<={)pattern(?=})~', $str);
$out = '';
for ($i=0; $i<count($tok); $i++)
   $out .= $tok[$i] . $repl[$i];
var_dump($out);

输出

string(38) "{AAA} test {BBB} how r u pattern {CCC}"
于 2012-10-17T07:10:19.593 回答
1
$values = array(
  'aaa', // first match
  'bbb', // second match
  'ccc'  // third match
);

$subject = '{pattern} test {pattern} how r u {pattern}';

$replaced = preg_replace_callback('/\{(.*?)\}/', function($matches) use ($values) { static $i = 0; return $values[$i++];  }, $subject);

echo $replaced;
于 2012-10-17T07:13:52.800 回答
0

使用str_replace

$haystack  = "{patternA} test {patternB} how are you {patternC}";
$search_for = array("{patternA}","{patternB}","{patternC}");
$replace_with   = array("{AAA}", "{BBB}", "{CCC}");

$new_string = str_replace($search_for, $replace_with, $haystack);
于 2012-10-17T07:00:52.083 回答
0

显然有多种方法可以实现这一点,但最推荐的方法是使用正则表达式。它们非常值得学习,但如果您现在没有时间学习,您只需查看备忘单并在相对较短的时间内制作适合您特定任务需求的备忘单。

于 2012-10-17T07:03:43.600 回答
0

如果您熟悉正则表达式,请查看 preg_replace。 http://php.net/manual/en/function.preg-replace.php

于 2012-10-17T06:59:23.470 回答
0
$pattern =array("{pattern1}","{pattern2}","{pattern3}");
$replace=array("aaaaa","bbbbb","ccccc");
$string="{pattern1} test {pattern2} how r u {pattern3}";
$replaceme=str_replace($pattern,$replace,$string);
于 2012-10-17T07:00:39.570 回答