regex — заменить последнее вхождение хотя бы двойной новой строки (\ n \ n) в строке переполнения стека

Мне нужно заменить последнее появление по крайней мере двойной новой строки (\ П \ п) в строке, так и должно быть \ П \ п или же \ П \ п \ п или же \ П \ п \ п \ п так далее (не менее 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

Может ли кто-нибудь помочь с этим и, возможно, дополнительно объяснить логику отвеченного регулярного выражения.

Большое спасибо.

5

Решение

Вы можете использовать

/\n{2,}(?!.*\n{2})/s

Увидеть regex demo

подробности:

  • \n{2,} — 2 или более новых строк
  • (?!.*\n{2}) — не сопровождается никакими 0+ символами, за которыми следуют 2 новых строки.

Если имеется в виду разрыв строки, замените \n с \R,

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]