2010-07-29 69 views
0

我試圖破解我正在開發的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的情況下使用它來更改代碼?

乾杯傢伙!

+3

不要使用正則表達式解析HTML:http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – ircmaxell 2010-07-29 17:21:16

+0

有趣的閱讀和有意義。在不久的將來可以使用像PHPQuery這樣的HTML解析器來替換我正在使用的骯髒的正則表達式方法。感謝您將文章引入我的注意! – Leonard 2010-07-29 23:42:38

回答

1

您需要使用反向引用。使用捕捉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

爲了清晰起見,我個人建議使用更精確的id =「([^」] +)「 – enobrev 2010-07-29 17:39:18

+0

乾杯,這是個伎倆,我認爲它符合$ 1的條件,但記不清楚。誠實的我不知道,括號是爲了這一點,我認爲這是數學風格分組。 感謝您的幫助。 – Leonard 2010-07-29 23:40:10

0

包裹要在(匹配)的模式,使用$ 1

0
$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); 
相關問題