php:动态preg_替换
下面的代码不是一个有效的方法,它只是用来帮助您理解我要做的事情php:动态preg_替换,php,regex,preg-replace,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
// $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;对于exmaple:我可能想用变量$r替换preg_replace模式的第二个匹配项,我认为您只能通过回调来完成这样的匹配项计数:
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
匹配不变,并在匹配倒计时时使用tempoary$this->r
一次。可以通过闭包来避免->$i
和->$r
但是。我认为您只能通过回调来完成此类事件计数:
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
匹配不变,并在匹配倒计时时使用tempoary$this->r
一次。可以使用闭包来避免->$i
和->$r
但是。$i是否包含要查找的正则表达式或字符串?在$i中有什么?整个模式?需要更多详细信息。匹配项的出现次数$例如,我可能是1,正则表达式需要找到1的出现,并用$r替换它@willm1是字符串出现的次数。$i是否包含正则表达式或要查找的字符串?在$i中有什么?整个模式?需要更多详细信息。匹配项的出现次数$例如,我可能是1,正则表达式需要找到1的出现,并用$r替换它@willm1字符串出现的次数。似乎无法使其正常工作?我确信这可能是我的错误。它仍然需要对$output执行一些操作。这个任务的另一个选择是preg\u split
和preg\u split\u DELIM\u CAPTURE
可能(但更精细一些)。我认为这两个函数需要包装在一个类中(作为方法)才能工作。这似乎不能工作吗?我确信这可能是我的错误。它仍然需要对$output执行一些操作。这个任务的另一个选择是preg\u split
和preg\u split\u DELIM\u CAPTURE
可能(但更精细)。我认为这两个函数需要包装在一个类中(作为方法)才能工作。