At 17:49 12.11.2002, Gustaf Sjoberg spoke out and said:
--------------------[snip]--------------------
>Hi,
>i'm trying to replace every instance of "<br>" within the "<pre>..</pre>"
>tags. i want all other breakrows to remain the same.
>
>i've tried numerous regular expressions, but i can't find a way to just
>replace the breakrows.. it replaces _everything_ bewteen <pre> and </pre>.
--------------------[snip]--------------------
You need a two-phase operation on this:
1) isolate all <pre></pre> elements
preg_match('/(.*?)<pre>(.*?)<\/pre>(.*)/is', $string, $armatch);
$armatch now contains:
[0] all, ignore this
[1] everything before <pre>
[2] everything within <pre></pre>
[3] the rest after </pre>
2) go on and replace all <br>'s here:
preg_replace('/<br>\n?/is', "\n", $armatch[2]);
The whole stuff would look something like
/* UNTESTED */
function kill_br_within_pre($string)
{
$re1 = '/(.*?)<pre>(.*?)<\/pre>(.*)/is';
$re2 = '/<br>\n?/is';
$result = null;
while ($string) {
$armatch = preg_match($re1, $string, $arMatch);
if (is_array($arMatch)) {
$result .= $arMatch[1];
$result .= preg_replace($re2, "\n", $arMatch[2]);
$string = $arMatch[3];
}
else break;
}
$result .= $string;
return $result;
}
This assumes that all <pre> are properly closed with </pre>. As said, I
didn't test, but it should work this or a similar way.
--
>O Ernest E. Vogelsinger
(\) ICQ #13394035
^ http://www.vogelsinger.at/