Sempiterna
Sempiterna

Reputation: 329

Remove empty lines from string, but allow one empty between every line

I would like to remove excessive empty lines from a string, but allow one empty line between every line. Like:

line1





line2

Should become:

line1

line2

I did find the following regex (forgot where i found it):

preg_replace('/^\n+|^[\t\s]*\n+/m','',$message);

This works, but removes all empty lines without leaving an empty line between every line.

Edit: I just created a quick example at http://jsfiddle.net/RAqSS/

Upvotes: 6

Views: 5603

Answers (3)

sudoash
sudoash

Reputation: 73

Based on your jsFiddle, try this:

$result = preg_replace('/\n(\n*\s)+/', "\n\n", $message);

Upvotes: 0

Andrew Clark
Andrew Clark

Reputation: 208405

Try the following:

preg_replace('/\n(\s*\n)+/', "\n\n", $message);

This will replace a newline followed by any number of blank lines with a single newline.

Upvotes: 4

Kendall Frey
Kendall Frey

Reputation: 44316

Try replacing:

\n(\s*\n){2,}

with:

\n\n

Like this:

preg_replace('/\n(\s*\n){2,}/', "\n\n", $message); // Quotes are important here.

If you don't want an empty line, you would change the {2,} to a + and use a single \n. It would actually work with a + instead of {2,}. The {2,} is an optimization.

Upvotes: 7

Related Questions