Php 用不同于句子的值替换单词

Php 用不同于句子的值替换单词,php,Php,我有一句话是这样的: {pattern} test {pattern} how r u {pattern} 如何用不同的值替换{pattern},如 {AAA} test {BBB} how r u {CCC} 如果您熟悉正则表达式,请查看preg_replace。 使用: 显然有多种方法可以实现这一点,但最推荐的方法是使用正则表达式。它们非常值得学习,但如果您现在没有时间学习,您可以查看一份备忘单,在相对较短的时间内制作一份适合您特定任务需要的备忘单。您可以使用以下代码: $str = '

我有一句话是这样的:

{pattern} test {pattern} how r u {pattern}
如何用不同的值替换
{pattern}
,如

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

如果您熟悉正则表达式,请查看preg_replace。 使用:


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

您可以使用以下代码:

$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);

如果您希望每次使用“<代码> PrggRePixyAcLead())< /代码>来替换相同的模式。每次匹配时,都会执行一个函数,您可以在每次调用时返回不同的字符串:

$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\u replace\u callback()
的第二个参数也可以是闭包(>=5.3)


另外,与其使用带有
静态
声明的常规函数,不如使用对象进行状态管理。

取决于您希望这些值如何更改。如果模式只有一个,而不是
{pattern1}
{pattern2}
等,您如何决定用什么替换
{pattern}
?当它是
{AAA}
{BBB}
{CCC}
时,没有特定的值,我们也可以像{BBB}测试{AAA}如何r u{CCC}或其他随机变量那样执行values@enenen您可以设置将字符串修改为AAA-BBB-CCC的模式。因为他知道他们出现的顺序。“我错过什么了吗?”他说“。。。或其他随机值”。我不确定他是否对订单有把握。当然,如果它完全按照指定的顺序排列,那就没有问题了。我很感激你的回答,但在我的情况下,它不像patternA,patternB。在我的例子中,这些都是相同的唯一模式词。那么我如何才能识别并替换它。就像我用substr\u count计算模式词一样,你如何知道用AAA、BBB或CCC替换哪个相同的词?我们需要用任意随机值替换相同的词。最推荐的是一个可以正常工作的内置函数表达式对于这个用例来说太过分了。该死!正是我想发布的内容:)
$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;
string(38) "{AAA} test {BBB} how r u pattern {CCC}"
$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);
$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;