Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Замена \r, \n, \n\r на \r\n
Покинул форум
Сообщений всего: 16
Дата рег-ции: Март 2010
Помог: 0 раз(а)
Здравствуйте! Нужна помощь в регулярном выражении…
Короче нужно заменять \r, \n, \n\r на \r\n.
Нужно чтобы, к примеру, в этой строке «\r\n\r\n\r\n\r\n» он НЕ заменял, потому что там все \r\n парные, а если \r без \n то заменить \r на \r\n, так же если \n без \r то заменить \n на \r\n.
Примеры должных результатов:
«\nтекст» - заменить.
«\n\rтекст» - заменить.
«текст\nтекст» - заменить.
«текст\n» - заменить.
«\r\n\r\n\r\n» - НЕ заменять (там все парные)
«\n\n\n\r\n\r\n\r» - заменить 3 первых \n и последнюю \r (или по другому…главное чтобы было 6 штук \r\n)
Ну, вроде ясно объяснил. Помогите, пожалуйста…
Uchkuma
Отправлено: 03 Сентября, 2010 - 21:17:12
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Сначала заменяем все \n\r, потом добиваем все что осталось
----- армия.. самое убогое место
JustUserR
Отправлено: 04 Сентября, 2010 - 12:01:54
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Brothersssddsss Для реализации приведенной вами задачи по приведению все встречаюихся в тексте символов новой строки и возврата каретки в единую форму можно использовать такую схему - вначале вы заменяете все вхождения символов \r и \n на значение \r\n с помощью функции трансляции для избежания повтороного прохода - далее вы производите замену подстроки \n\r на \r\n и потом удаляете все повторяющиеся переводы строки путем повторной замены \r\n\r\n на одиночное значение \r\n
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Uchkuma
Отправлено: 04 Сентября, 2010 - 14:55:28
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
movEAX, твой вариант не покатит. Строку "\r\n\r\n\r\n\r\n", которую вообще бы трогать не надо, он превратит сначала в "\r\r\n\r\n\r\n\n", а потом в "\r\n\r\n\r\n\r\n\r\n".
В итоге получили лишние преобразования и лишний "\r\n".
cHameleon
Отправлено: 04 Сентября, 2010 - 15:19:33
Гость
Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010
наверное после таких извращений я автоматически становлюсь быдлокодером
----- берём notepad++ и творим пэхэпэ-мир
Uchkuma
Отправлено: 04 Сентября, 2010 - 15:59:11
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
cHameleon, креативный подход !
Brothersssddsss пишет:
Спасибо. У кого нибудь есть ещё решения? предлагайте...
А какое решение вы еще ожидаете? Самое простое и правильное вам уже выдали.
movEAX
Отправлено: 04 Сентября, 2010 - 16:09:43
Частый посетитель
Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009
Помог: 16 раз(а)
Uchkuma пишет:
movEAX, твой вариант не покатит. Строку "\r\n\r\n\r\n\r\n", которую вообще бы трогать не надо, он превратит сначала в "\r\r\n\r\n\r\n\n", а потом в "\r\n\r\n\r\n\r\n\r\n".
В итоге получили лишние преобразования и лишний "\r\n".
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
movEAX, да, шаблон просто бегло просмотрел )
JustUserR
Отправлено: 05 Сентября, 2010 - 13:17:33
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
cHameleon пишет:
Наверное после таких извращений я автоматически становлюсь быдлокодером
Приведенная вами схема решения после внесения некоторых изменения становится достаточно оптимальной - суть заключается в том что путем использования спецаильных подстрок test1 и test2 на самом деле вы осуществляется дифференциацию уже проведенных замен и тех которые еще не были проведены - поэтому если произвести некотрое предварительное кодирование строки и использовать более короткие замещающие строки то такой вариант становится достаточно оптимальным
Кроме того для более прямого решения можно использовать функцию strtr - по сути она выполняете такой же по результату алгоритм в результате которого все двойные замены блокируются - даже если в результате последовательного проведения поиска вхождение предлагающий одинаковый результат
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
CenapaTop
Отправлено: 05 Сентября, 2010 - 15:09:23
Частый гость
Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
CenapaTop Для более точного решения исходной задачи с сохранением числа вхождений перевода строки необходимо внести в приведенный вами пример несколько модификаций - в частности заместо функции str_replace можно использовать функцию трансляци strtr которая позволяет производить все замены в чистом виде - вне зависимости от порядка их следования в тексте и возможности наложения - такой подход должен гарантировать что к примеру все замены \n\r будут произведены полностью если это возможно Кроме того необходимо обеспечит отсутсивие символа # в оригинальном тексте - что может решаться путем двухпроходного предварительного шифрования
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Brothersssddsss
Отправлено: 10 Сентября, 2010 - 22:11:40
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Март 2010
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.