Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > перенос строки \n


Автор: evya 5.2.2011, 17:10
удаляю перенос строки
$br="<br>";
$des =~ s/\n/$br/g;


кое где удаляет, а кое где остается?!
что за хрень подскажите???

Автор: ming 5.2.2011, 20:20
s/\r|\n/$br/gs;

Автор: alezzz 5.2.2011, 20:44
Цитата(ming @  5.2.2011,  20:20 Найти цитируемый пост)
s/\r|\n/$br/gs;


ming,  а зачем так? для текста из Windows будет два <br> на каждый перенос строки, и все нормально работает без /s, "." (точка) в выражении не участвует.

evya, покажите где удаляет и где не удаляет.

Добавлено
странно.. взял текстовый файл в Windows с переводом строки двумя символами /r/n, проверил двумя выражениями: s/\n/<br>/g и s/\r|\n/<br>/g -- эффект одинаковый, все переводы строки заменились на <br>

Автор: MasterOfRegex 16.2.2011, 12:37
Правильно s/\r?\n/$br/g;
Но лучше удалить \r, а потом заменять:
tr/\r//d;
s/\n/$br/g;

Автор: alezzz 16.2.2011, 17:18
Выяснилась другая вешь, достаточно \n, это никак не привязано к коду символа переноса, перл воспринимает это как логический перенос строки в зависимости от системы на которой установлен перл. Проверял по Windows варианты с \n\r и с \n -- результат одинаковый. Единственное что не проверил это как обрабатываются в Unix файлы созданные в Windows.

http://perldoc.perl.org/perlport.html#Newlines

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)