我有这样一句话:
{pattern} test {pattern} how r u {pattern}
如何将{pattern}
替换为不同的值,例如
{AAA} test {BBB} how r u {CCC}
答案 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)
显然有多种方法可以实现这一点,但最推荐的方法是使用正则表达式。它们非常值得学习,但如果您现在没有时间学习它,您可以查看备忘单,并在相对较短的时间内制作符合特定任务需求的备忘单。