Подтвердить что ты не робот

Как я могу разделить строку на куски двух символов на Perl?

Как взять строку в Perl и разделить ее на массив с двумя символами длиной каждый?

Я попытался это сделать:

@array = split(/../, $string);

но не получили ожидаемых результатов.

В конечном итоге я хочу сделать что-то вроде этого

F53CBBA476

в массив, содержащий

F5 3C BB A4 76
4b9b3361

Ответ 1

@array = ( $string =~ m/../g );

Оператор соответствия шаблону ведет себя особым образом в контексте списка в Perl. Он обрабатывает операцию итеративно, сопоставляя шаблон с остальной частью текста после предыдущего совпадения. Затем список формируется из всего текста, который был согласован во время каждого применения сопоставления с образцом.

Ответ 2

Если вы действительно должны использовать split, вы можете сделать:

grep {length > 0} split(/(..)/, $string);

Но я думаю, что самый быстрый способ был бы с unpack:

unpack("(A2)*", $string);

Оба эти метода имеют "преимущество" в том, что если строка имеет нечетное число символов, она выведет последнюю из них.

Ответ 3

Собственно, чтобы поймать нечетный символ, вы хотите сделать второй символ необязательным:

@array = ( $string =~ m/..?/g );

Ответ 4

Образец, переданный в split, идентифицирует то, что отделяет то, что вы хотите. Если вы хотите использовать split, вы бы использовали что-то вроде

my @pairs = split /(?(?{ pos() % 2 })(?!))/, $string;

или

my @pairs = split /(?=(?:.{2})+\z)/s, $string;

Это довольно плохие решения. Лучшие решения включают:

my @pairs = $string =~ /..?/sg;  # Accepts odd-length strings.

my @pairs = $string =~ /../sg;

my @pairs = unpack '(a2)*', $string;