Наконец-то все заработало и протестировано.Я решил разбить процесс на два прохода замен, чтобы сохранить код регулярного выражения простым (вы можете объединить оба, если хотите).
Первый (/\n | {1,} | \n/
) будет искать любую случайную комбинацию пробелов и \n
символов, оставляя соло \n
.
Второй ('/(?<=\n{2})\n*/'
) использует функцию поиска позади, чтобы сопоставить любую группу из \n
символов, которая следует за любым \ n \ n (двойнымновая строка).
Тестирование:
$string ="
Loren Ipsum Dolor Sit Amet\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
\n
\n
.\n
\n
..\n
.....\n
.\n
...\n
Loren Ipsum Dolor Sit Amet";
$string = preg_replace('/\n | {1,} | \n/', '', $string);
$string = preg_replace('/(?<=\n{2})\n*/', '', $string);
echo $string;
Вывод:
Loren Ipsum Dolor Sit Amet\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet
Я не гуру регулярных выражений, но я думаю, что это уже решает проблему прилично.