Вопрос по рег.выражениям

[Удален]
338

Здравствуйте.

прошу немножко помочь с регулярками.

есть отрезок текста, в котором есть вставки программного кода обрамлённые тегами <pre><code>здесь код</code></pre>

нужно только в этом коде убрать все теги <br>, а в остальном тексте оставить..

Почистить сам код у меня получается вот так:

preg_match_all ('#<pre><code>(.*?)</code></pre>#is', $note_text, $m );

for($i=0; $i<count($m[0]); $i++ ) {
$del_tags = array('br');
foreach ($del_tags as $tag)
$code_inside = preg_replace('/<[\/]?'.$tag.'[^>]*>/i', '', $m[0][$i]);
}

а вот как это доделать всё, чтобы в итоге получился исходный текст, но с уже обработанными вставками кода - пока не понимаю..

SP
На сайте с 20.05.2008
Offline
56
#1

Можно использовать функцию preg_replace с модификатором 'e', который позволяет делать замену с обработкой найденных значений (в данном случае это будет Ваша "функция очищения кода").

Делаю небольшие заказы на php, perl, js/ajax, delphi; парсеры, простые сайты с админкой, установка\настройка sape, wordpress и др. Мой Блог (http://www.seoproger.ru)
[Удален]
#2

вопрос решён. товарищ помог. можно вот так сделать:

	function remove_br ($note_text) 

{
return '<pre><code>'.str_replace ('<br />', '', $note_text[1]).'</code></pre>';
}
$note_text = preg_replace_callback ('|<pre><code>(.*)</code></pre>|Us', 'remove_br', $note_text);
T
На сайте с 01.10.2004
Offline
73
#3


while(($txt_tmp = $txt) != ($txt = preg_replace("|(?<=<pre><code>)(.*)<br */?>(.*)(?=</code></pre>)|iUs", "$1$2", $txt)));

в $txt исходный текст, после выполнения скрипта - обработанный текст

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий