Мне нужно заменить последнее появление по крайней мере двойной новой строки (\ П \ п) в строке, так и должно быть \ П \ п или же \ П \ п \ п или же \ П \ п \ п \ п так далее (не менее 2 \ n) посредством «@@«. Я думаю, что это должно быть preg_replace. Я перепробовал много вариантов, которые есть в ответах здесь переполнение стека, но у всех этих вариантов есть некоторые случаи, которые не были пойманы. Я пробовал сайт regex101 для подготовки регулярных выражений, но я не силен в этом, поэтому я нашел какое-то решение, похожее на работу на сайте (/((\\n){2,})+(?!.*((\\n){2,})+)/i
), но когда я пытаюсь сделать это в своем коде, я не работаю.
Еще один был ([\\n\\n])+(.[^\\n\\n])*$
, но этот поймал и последний пп
Тестовая строка была:
Хранилище \ nВысокий четырехъядерный процессор Intel X5 в Transformer Book T101HA означает, что у вас не возникнет проблем с быстрым выполнением всех ваших повседневных задач, \ n с бесшовной многозадачностью, позволяющей выполнять больше задач за меньшее время. Хранение также удобно и гибко. Внутри находится сверхбыстрая флеш-память объемом 128 ГБ, которую можно легко расширить через слот для карты micro SD. Вы также получаете бесплатное неограниченное облачное хранилище в течение года в ASUS WebStorage! \ N \ nЦвет | Белый / Золотой \ n \ n \ n \ n \ n \ nCPU | Innn dsafdsfdfa \ П \ п \ п \ п \ п \ п \ п \ п dfnn
Итак, результат должен быть:
Хранилище \ nВысокий четырехъядерный процессор Intel X5 в Transformer Book T101HA означает, что у вас не возникнет проблем с быстрым выполнением всех ваших повседневных задач, \ n с бесшовной многозадачностью, позволяющей выполнять больше задач за меньшее время. Хранение также удобно и гибко. Внутри находится сверхбыстрая флеш-память объемом 128 ГБ, которую можно легко расширить через слот для карты micro SD. Вы также получаете бесплатное неограниченное облачное хранилище в течение года в ASUS WebStorage! \ N \ nЦвет | Белый / Золотой \ n \ n \ n \ n \ n \ nCPU | Innn dsafdsfdfa @@ dfnn
Может ли кто-нибудь помочь с этим и, возможно, дополнительно объяснить логику отвеченного регулярного выражения.
Большое спасибо.
Вы можете использовать
/\n{2,}(?!.*\n{2})/s
Увидеть regex demo
подробности:
\n{2,}
— 2 или более новых строк(?!.*\n{2})
— не сопровождается никакими 0+ символами, за которыми следуют 2 новых строки.Если имеется в виду разрыв строки, замените \n
с \R
,
Других решений пока нет …