2010-07-29 2 views
0

Я пытаюсь взломать некоторый код боковой панели в шаблоне Wordpress, который я разрабатываю. В основном я захватил то, что мне нужно в выходном буфере, и я запустил regex над ним, чтобы заменить бит кодом, который мне нужен. Проблема в том, что мои знания в регулярном выражении - это немного краткое из того, что мне нужно достичь.Использование 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.

Как я могу использовать это для изменения кода без уничтожения этих уникальных идентификаторов?

Cheers guys!

+3

Не следует использовать регулярное выражение для анализа HTML: http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – ircmaxell

+0

Интересное чтение и имеет смысл. Посмотрите на использование парсера HTML, такого как PHPquery, в ближайшем будущем, чтобы заменить грязный метод регулярного выражения, который я использую. Спасибо, что привлекли статью к моему вниманию! – Leonard

ответ

1

Вам необходимо использовать обратную ссылку. Захват идентификатор с помощью(), а затем ссылаться на захват с $ 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

+0

Приветствия, которые сделали трюк. Я думал, что это было по линии 1 доллара, но не могло точно помнить. честный, я не знал, что для этого были скобки, я предположил, что это было для группировки математического стиля. Спасибо за помощь. – Leonard

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); 
Смежные вопросы