用句子替换不同值的单词

时间:2012-10-17 06:56:38

标签: php

我有这样一句话:

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

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

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

7 个答案:

答案 0 :(得分: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声明的常规函数​​。

答案 1 :(得分: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}"

答案 2 :(得分: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;

答案 3 :(得分:0)

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

答案 4 :(得分: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);

答案 5 :(得分: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);

答案 6 :(得分:0)

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