Дана литеральная строка, такая как:
Hello\n\n\n\n\n\n\n\n\n\n\n\nWorld
Я хотел бы уменьшить повторяющиеся \n до одного \n.
Я использую PHP и играю с кучей разных шаблонов регулярных выражений. Итак, вот простой пример кода:
$testRegex = '/(\\n){2,}/';
$test = 'Hello\n\n\n\n\n\n\n\n\nWorld';
$test2 = preg_replace($testRegex ,'\n',$test);
echo "<hr/>test regex<hr/>".$test2;
Я новичок в PHP, не новичок в регулярных выражениях, но кажется, что '\n' соответствует специальным правилам. Я все еще пытаюсь их прибить.
Редактировать: я поместил буквальный код, который у меня есть в моем файле php, здесь, если я сделаю str_replace(), я могу добиться хороших результатов, но это, очевидно, не полное решение.
Ответ 1 · рейтинг 3 · Ry-♦
Чтобы сопоставить литерал \n с регулярным выражением, вашему строковому литералу нужны четыре обратные косые черты, чтобы создать строку с двумя обратными косыми чертами, которая интерпретируется механизмом регулярных выражений как escape для одной обратной косой черты.
$testRegex = '/(\\\\n){2,}/';
$test = 'Hello\n\n\n\n\n\n\n\n\n\n\n\nWorld';
$test2 = preg_replace($testRegex, '\n', $test);
Ответ 2 · Chris
Возможно, вам нужно удвоить побег в регулярном выражении?
$pattern = "/\\n+/"
$awesome_string = preg_replace($pattern, "\n", $string);
Ответ 3 · Dan Lugg
Изменить. Просто прочитайте свой комментарий к принятому ответу. Не применимо, но все же полезно.
Если вы собираетесь расширить эту логику, включив в нее и другие формы пробелов:
$output = echo preg_replace('%(\s)*%', '$1', $input);
Сокращает все повторяющиеся символы пробела до отдельных экземпляров соответствующего символа пробела.
Ответ 4 · рейтинг -1 · moritz
это действительно соответствует специальным правилам, и вам нужно добавить модификатор "многострочный", м.б. Таким образом, ваш шаблон будет выглядеть
$pattern = '/(\n)+/m'
который должен предоставить вам спички. См. документ для всех модификаторов и их подробного значения.
Поскольку вы пытаетесь сократить все новые строки до одной, приведенный выше шаблон должен работать с остальной частью вашего кода. Удачи!