php:动态preg_replace

时间:2011-04-01 21:56:34

标签: php regex preg-replace

下面的代码不是一个功能正常的方法,它只是为了帮助您理解我正在尝试做的事情。


// $i = occurrence to replace
// $r = content to replace

private function inject($i, $r) {
      // regex matches anything in the format {value|:value}
      $output = preg_replace('/\{(.*?)\|\:(.*?)\}/', '$r', $this->source);
      $output[$i]
}

如何在$ output中找到$ i出现;并用$ r替换它;?

注意:我想要做的只是使用$ i(这是一个数字)来查找preg_replace中该nmber的出现;例如:我可能想用变量$ r

替换preg_replace模式的第二次出现

1 个答案:

答案 0 :(得分:1)

我认为你只能通过回调完成这样的事件计数:

private function inject($i, $r) {
      $this->i = $i;
      $this->r = $r;

      // regex matches anything in the format {value|:value}
      $output = preg_replace_callback('/\{(.*?)\|\:(.*?)\}/',
                array($this, "inject_cb"), $this->source);
}

function inject_cb($match) {
    if ($this->i --) {
        return $match[0];
    }
    else {
        return $this->r;
    }
}

按原样保留第一个$i个匹配项,并在倒计时匹配时使用一次$this->r。可以使用闭包来避免->$i->$r