php:动态 preg_replace

发布于 2024-10-29 03:27:52 字数 462 浏览 1 评论 0原文

下面的代码不是一个功能方法,它只是为了帮助您理解我想要做什么而编写的。


// $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 中该数字的出现;例如:我可能想用变量 $r 替换第二次出现的 preg_replace 模式

The code below is not a functioning method it's just written to help you understand what I'm trying to do.


// $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]
}

How do I find the $i occurrence in $output; and replace it with $r;?

Note: All I want to do is use $i (which is a number) to find the occurrence of that nmber in a preg_replace; For exmaple: I might want to replace the second occurrence of the preg_replace pattern with the variable $r

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

楠木可依 2024-11-05 03:27:52

我认为你只能通过回调来完成这样的出现计数:

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

I think you can only accomplish such an occurence counting with a callback:

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;
    }
}

It leaves the first $i matches as is, and uses the tempoary $this->r once when the countdown is matched. Could be done with a closure to avoid ->$i and ->$r however.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文