2013-02-16 2 views
13

Я никогда раньше не использовал Perl, и у меня есть основной вопрос.split() но сохраните разделитель

my $string1 = "Hi. My name is Vlad. It is snowy outside."; 

my @array = split('.' $string1); ##essentially I want this, but I want the period to be kept 

Я хочу разбить эту строку на '.' Но я хочу сохранить этот период. как это можно сделать?

ответ

21

Вы можете использовать для просмотра назад сделать это:

split(/(?<=\.)/, $string) 

Регулярное выражение соответствует пустой строке, следующей за периодом.

Если вы хотите удалить пробел между предложениями в то же время, вы можете изменить его на:

split(/(?<=\.)\s*/, $string) 

Положительные и отрицательные просмотра назад объясняется here

+0

Он работает именно так, как он должен поблагодарить вас. Не могли бы вы объяснить, что именно происходит? – SystemFun

+0

Насколько синтаксис? – SystemFun

+0

Добавлена ​​ссылка на regular-expressions.info – Barmar

10

Если вы не возражаете периоды раскалывается в свои собственные элементы в массиве, вы можете использовать круглые скобки, чтобы сказать раскол, чтобы держать их:

my @array = split(/(\.)/, $string); 
+0

Я полагаю, я мог бы работать с этим, но я бы предпочел привязать их к предложению, чтобы каждый элемент массива был по существу предложением. – SystemFun

+0

Это звучит как проблема с lookbehind или lookahead, которая мне не нравится. –

Смежные вопросы