使用preg_replace而不破坏id信息

发布于 2024-09-12 04:59:41 字数 546 浏览 8 评论 0原文

我正在尝试破解我正在开发的 WordPress 模板中的一些侧边栏代码。基本上,我已经在输出缓冲区中捕获了我需要的内容,并在其上运行正则表达式,以用我需要的代码替换位。问题是我的正则表达式知识对于我需要实现的目标来说有点短。

我遇到的问题是这样的:

$output = preg_replace('/<\/li><li id=".*?" class="widget-container/', '<a href="top">Top</a></li><li><li id="[item from that find]" class="widget-container/', $input);

目前代码我可以找到我需要的东西,但它破坏了那些 id 属性,因为我无法捕获它们。

我确信有一种方法可以捕获并在替换中使用它,但我找不到任何东西可以告诉我我需要什么,或者我是否对 preg_replace 采取了错误的方法。

我如何使用它来更改代码而不破坏这些唯一的 ID?

干杯伙计们!

I'm trying to hack about some sidebar code in a Wordpress template I'm developing. Basically I've captured what I need in an output buffer and I'm running regex over it to replace bits with the code I need. Problem is my regex knowledge is just a bit short on what I need to achieve.

The problem I'm having is as such:

$output = preg_replace('/<\/li><li id=".*?" class="widget-container/', '<a href="top">Top</a></li><li><li id="[item from that find]" class="widget-container/', $input);

At the moment as the code stands I can find what I need but it destroys those id attributes as I can't capture them.

I'm sure there is a way I can do this to capture and use it in the replacement but I can't find anything that tells me what I need or if I'm taking the wrong approach with preg_replace.

How can I use this to change code without destroying those unique ids?

Cheers guys!

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

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

发布评论

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

评论(3

猥︴琐丶欲为 2024-09-19 04:59:41

您需要使用反向引用。使用 ( ) 捕获 id,然后使用 $1 引用捕获...见下文:

$output = preg_replace('/<\/li><li id="(.*?)" class="widget-container/', '<a href="top">Top</a></li><li><li id="$1" class="widget-container/', $input);

You need to use a back reference. Capture the id using ( ) and then reference the capture with $1 ... see below:

$output = preg_replace('/<\/li><li id="(.*?)" class="widget-container/', '<a href="top">Top</a></li><li><li id="$1" class="widget-container/', $input);
噩梦成真你也成魔 2024-09-19 04:59:41

将要匹配的模式包含在 ( ) 中并使用 $1

wrap the pattern you want to match in ( ) and use $1

酒浓于脸红 2024-09-19 04:59:41
$pattern = '/<\/li><li id="(.*?)" class="widget-container/';
$replace = '<a href="top">Top</a></li><li><li id="$1" class="widget-container/'
$output = preg_replace($pattern, $replace, $input);
$pattern = '/<\/li><li id="(.*?)" class="widget-container/';
$replace = '<a href="top">Top</a></li><li><li id="$1" class="widget-container/'
$output = preg_replace($pattern, $replace, $input);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文