En stock PHP5, ce qui est une bonne expression preg_replace
pour faire cette transformation:Remplacer les nouvelles lignes avec des balises BR, mais seulement dans les balises PRE
remplacer les nouvelles lignes avec <br />
, mais seulement dans <pre>
blocs
(N'hésitez pas à faire des hypothèses simplificatrices et à ignorer les cas de coin.Par exemple, nous pouvons supposer que les balises seront une ligne, et non des choses pathologiques comme)
Texte d'entrée:
<div><pre class='some class'>1
2
3
</pre>
<pre>line 1
line 2
line 3
</pre>
</div>
Sortie:
<div><pre>1<br />2<br />3<br /></pre>
<pre>line 1<br />line 2<br />line 3<br /></pre>
</div>
(contexte Motiver: essayer de fermer 20760 bug dans une extension de SyntaxHighlight_GeSHI wikimedia, et de trouver les mes compétences en PHP (je fais surtout python) ne sont pas à la hauteur).
Je suis ouvert à d'autres solutions, en plus de regexen, mais petit est préféré (à titre d'exemple, la construction de machines d'analyse html est trop lourde).
réponse mis à jour avec 'html_entity_decode', retirez-le si vous ne avez pas besoin. –
J'ai juste jeté une regex rapide pour les nouvelles lignes, si vous voyez un problème laissez-moi savoir, pour vous wizards perl regex :) –
Cela échoue à mes fins, en ce que le HTML_entity_decode ajoute en newlines entre les éléments. Ne me blâmez pas, blâmer la classe Parser de wikimedia :) –