Perl разбил строку на повторяющийся шаблон наиболее эффективным способом? - PullRequest
4 голосов
/ 26 января 2012

Я хотел бы разбить строку, которая имеет определенный повторяющийся шаблон, например:

$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";

до

@array=(-SOMETHING-ELSE-,-LAST);

моя попытка пока что новичок в perl

split(/G{2,}/,$string);

К сожалению, это приводит к расщеплению только паттернов GG, а не жадных паттернов GGGGG или GGG, на которые я надеялся получить 2 элемента массива.

Ответы [ 2 ]

5 голосов
/ 26 января 2012

Нет, похоже (в основном) работает как задумано.Следующий код:

use strict;
use warnings;

$_="GGGGG-SOMETHING-ELSE-GGG-LAST";
my @a=split(/G{2,}/,$_);
print join(",",@a) . "\n";

производит вывод:

,-SOMETHING-ELSE-,-LAST

Проблема в том, что существует первый элемент, который является пустой строкой.Итак, чтобы исправить это, вы можете сделать что-то вроде:

use strict;
use warnings;

$_="GGGGG-SOMETHING-ELSE-GGG-LAST";
my @a=grep{$_ ne ""}(split(/G{2,}/,$_));
print join(",",@a) . "\n";

И это производит то, что вы хотите:

-SOMETHING-ELSE-,-LAST
0 голосов
/ 26 января 2012

Я только что проверил ваш код на моей машине, и он отлично работает:

$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
print join(':', split(/G{2,}/,$string));

возвращается:

:-SOMETHING-ELSE-:-LAST

Используемая версия Perl: v5.10.1

Не могли бы вы добавить дополнительную информацию о том, как вы ее используете?

...