tags:

views:

92

answers:

2

Hello,

How can I turn this:


...<br />
<br />
...<br />
...<br />
<br />
<br />
...<br />

Into this using PHP:

...<br />
...<br />
...<br />
...

Please notice the deletion of the first and last
even if it's mentioned once. In the middle we keep just one

+3  A: 
preg_replace('#<br />(\s*<br />)+#', '<br />', $your_string);

This will replace instances of more than one <br />, optionally with whitespace separating them, with a single <br />.

Note that <br /> in the pattern matches exactly that. If you wanted to be more defensive, you could change it to <br[^>]*> which would allow for <br> tags that have attributes (ie. <br style="clear: both;" />) or that don't have the trailing slash.

Daniel Vandersluis
+2  A: 

First of all, you should edit your question because the first <br /> doesn't appear.

Then to replace all duplicate <br /> AND the first and the last one, you can do :

$str = <<<EOD
<br />
...<br />
<br />
...<br />
...<br />
<br />
<br />
...<br />
EOD;

$str = preg_replace('~(^<br />\s*)|((?<=<br />)\s*<br />)|(<br />\s*$)~', '', $str);
echo "===\n",$str,"\n===\n";

This will output:

===
...<br />
...<br />
...<br />
...
===
M42