在不破坏身份信息的情况下使用preg_replace
问题描述:
我试图破解我正在开发的Wordpress模板中的一些侧边栏代码。基本上我已经在输出缓冲区中捕获了我需要的东西,并且运行了正则表达式来替换我需要的代码。问题是我的正则表达式知识对于我需要实现的东西来说有点短暂。在不破坏身份信息的情况下使用preg_replace
我遇到的问题是这样:
$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的情况下使用它来更改代码?
干杯家伙!
答
您需要使用反向引用。使用捕捉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);
答
包裹要在(匹配)的模式,使用$ 1
答
$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);
不要使用正则表达式解析HTML:http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – ircmaxell 2010-07-29 17:21:16
有趣的阅读和有意义。在不久的将来可以使用像PHPQuery这样的HTML解析器来替换我正在使用的肮脏的正则表达式方法。感谢您将文章引入我的注意! – Leonard 2010-07-29 23:42:38