PHP preg_replace() 反向引用用作另一个函数的参数

发布于 2024-07-30 05:43:37 字数 669 浏览 4 评论 0原文

我正在尝试使用正则表达式从标签中提取信息,然后根据标签的各个部分返回结果。

preg_replace('/<(example )?(example2)+ />/',analyze(array($0, $1, $2)), $src);

所以我正在抓取零件并将其传递给 analyze() 函数。 一旦到达那里,我想根据部件本身进行工作:

function analyze($matches) {
    if ($matches[0] == '<example example2 />')
          return 'something_awesome';
    else if ($matches[1] == 'example')
          return 'ftw';
}

等等。但是一旦我进入分析函数,$matches[0]就等于字符串'$0 '。 相反,我需要 $matches[0] 来引用 preg_replace() 调用中的反向引用。 我怎样才能做到这一点?

谢谢。

编辑:我刚刚看到了 preg_replace_callback() 函数。 也许这就是我正在寻找的......

I am trying to extract information from a tags using a regex, then return a result based on various parts of the tag.

preg_replace('/<(example )?(example2)+ />/', analyze(array($0, $1, $2)), $src);

So I'm grabbing parts and passing it to the analyze() function. Once there, I want to do work based on the parts themselves:

function analyze($matches) {
    if ($matches[0] == '<example example2 />')
          return 'something_awesome';
    else if ($matches[1] == 'example')
          return 'ftw';
}

etc. But once I get to the analyze function, $matches[0] just equals the string '$0'. Instead, I need $matches[0] to refer to the backreference from the preg_replace() call. How can I do this?

Thanks.

EDIT: I just saw the preg_replace_callback() function. Perhaps this is what I am looking for...

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

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

发布评论

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

评论(2

情绪失控 2024-08-06 05:43:39
$regex = '/<(example )?(example2)+ \/>/';
preg_match($regex, $subject, $matches);

// now you have the matches in $matches and you can process them as you want

// here you can replace all matches with modifications you made
preg_replace($regex, $matches, $subject);
$regex = '/<(example )?(example2)+ \/>/';
preg_match($regex, $subject, $matches);

// now you have the matches in $matches and you can process them as you want

// here you can replace all matches with modifications you made
preg_replace($regex, $matches, $subject);
临风闻羌笛 2024-08-06 05:43:38

您不能像这样使用 preg_replace 。 您可能需要 preg_replace_callback

You can't use preg_replace like that. You probably want preg_replace_callback

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