Sie An jeder Position müssen überprüfen, ob Sie in einem gültigen <pre>
Tag sind:
~(?s)(?<!<pre>)\R(?!</pre>)(?=((?!<pre>).)*</pre>)~
Erläuterung:
(?s) # Set DOT_ALL modifier
(?<!<pre>) # Assert if we are not immediately after an opening <pre> tag
\R # We need new-lines only
(?!</pre>) # Not followed by a closing </pre> tag
(?= # Beginning of a positive lookahead
((?!<pre>).)* # To look if we are not behind an opening <pre> tag (inside a <pre> tag)
</pre> # Which has a closing </pre> tag
) # End of lookahead
Live demo
Hinweis: Es spielt keine Wenn Sie verschachtelthaben, liefern Sie keine erwarteten Ergebnisse 210 Tags
Aber wenn Sie sind komfortabel mit DOM
zu arbeiten, dann gibt es eine passende Lösung für diese (!):
<?php
$html = <<< HTML
<div>
<div>
test
test
test
</div>
<pre>
Line one
Line two
Line three
Line four
Line five
Line six
</pre>
</div>
HTML;
$dom = new DOMDocument;
@$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$preTags = $dom->getElementsByTagName('pre');
foreach ($preTags as $key => $pre) {
$pre->nodeValue = str_replace(PHP_EOL, '~*~*', $pre->nodeValue);
}
echo str_replace("~*~*", '<br />', $dom->saveHTML());
Ausgang:
<div>
<div>
test
test
test
</div>
<pre><br />Line one<br />Line two<br />Line three<br />Line four<br />Line five<br />Line six<br /></pre>
</div>
So Zeichenfolge derzeit ' \ n \ Zeilenumbrüche und Sie möchten sie durch '
' ersetzen? Was siehst du, wenn du 'var_dump ($ string)' die Zeichenfolge? – BeetleJuice
Schauen Sie sich die Funktion 'nl2br' an. – chris85
Mögliches Duplikat von [Ersetzen von \ r & \ n mit
?] (Http://stackoverflow.com/questions/5946114/how-to-replace-rn-with-br) – chris85