Как я могу удалить разрывы строк с помощью регулярного выражения Perl? - PullRequest
3 голосов
/ 28 апреля 2009

когда я бегу:

perl -e '$x="abc\nxyz\n123"; $x =~ s/\n.*/... multiline.../; printf("str %s\n", $x);'

Я ожидаю, что результат будет:

str abc... multiline...

вместо этого я получаю

str abc... multiline...
123

Куда я иду не так?

Ответы [ 2 ]

7 голосов
/ 28 апреля 2009
$x =~ s/\n.*/... multiline.../s
Модификатор

/s указывает Perl обрабатывать сопоставленную строку как однострочную, что приводит к совпадению . с новыми строками. Обычно это не так, что приводит к вашему наблюдаемому поведению.

2 голосов
/ 28 апреля 2009

Вам нужно использовать модификатор 's' в своем регулярном выражении, чтобы точка '.' будет соответствовать любым последующим переводам строки. Итак, это:

$x =~ s/\n.*/... multiline.../;

Становится так:

$x =~ s/\n.*/... multiline.../s;
...