Вариант 1:
Нет необходимости проверять, сколько цифр на каждой стороне точки разделения, поэтому вы можете просто заменить \d+
на \d
, чтобы избежать ошибки, которую вы получаете. Но тогда вы заметите вторую проблему с вашим решением: вы не просто разделяете между цифрами и не цифрами; Вы также разделяете две цифры. Исправлено:
my @parts = split /(?<=\D)(?=\d)|(?<=\d)(?=\D)/, $string;
Вариант 2:
Текст, захваченный шаблоном, переданным split
, возвращается, что дает нам альтернативное решение с использованием split
.
my @parts = grep length, split /(\d+)/, $string;
grep
обрабатывает случай, когда $string
начинается с цифры.
Вы попадаете в ситуацию, когда вам нужно исправить вывод split
, например, когда то, на что вы разбиваете, на самом деле не является разделителем. Это должно сказать вам, что split
не подходит в такой ситуации.
Вариант 3:
Здесь будет простой матч с регулярным выражением.
my @parts = $string =~ /\d+|\D+/g;