Разделить содержимое вверх. Это легко сделать с помощью ...
$blocks = preg_split('/<(|\/)pre>/', $html);
Только будьте осторожны, потому что элементы $ blocks не будут содержать тегов предварительного открытия и закрытия. Я считаю, что предположить, что HTML-код допустим, приемлемо, и поэтому вы можете ожидать, что предварительные блоки будут любыми другими элементами массива (1, 3, 5, ...). Легко тестируется с $i % 2 == 1
.
Пример "завершенного" скрипта (измените, как вам нужно) ...
<code><?php
//out example HTML file - could just as easily be a read in file
$html = <<<EOF
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Title</h1>
<p>
This is an article about...
</p>
<pre>
line one
line two
line three
случайный
EOF;
// разбить все на части ...
$ blocks = preg_split ('/ <(| \ /) pre> /', $ html);
// и снова сложить все вместе
$ html = ""; // повторно использовать в качестве нашего буфера
foreach ($ блоков как $ i => $ блок)
{
если ($ i% 2 == 1)
$ html. = "\ n
$block
\ n"; // разрываемся
...
с \ n
еще
$ html. = str_replace (array ("\ n", "\ r"), "", $ block, $ c);
}
echo $ html;
?>