下面的代码不是一个功能正常的方法,它只是为了帮助您理解我正在尝试做的事情。
// $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模式的第二次出现答案 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
。