Я новичок в Perl, я хотел знать, есть ли способ генерировать все комбинации, соответствующие регулярному выражению.
как лучше всего сгенерировать все совпадающие строки:
05[0,2,4,7][\d]{7}
заранее спасибо.
Я новичок в Perl, я хотел знать, есть ли способ генерировать все комбинации, соответствующие регулярному выражению.
как лучше всего сгенерировать все совпадающие строки:
05[0,2,4,7][\d]{7}
заранее спасибо.
Нет способа сгенерировать все совпадения для определенного регулярного выражения. Рассмотрим это:
a+
Существует бесконечное количество совпадений для этого регулярного выражения, поэтому вы не можете перечислить их все.
Кстати, я думаю, вы хотите, чтобы ваше регулярное выражение выглядело так:
05[0247]\d{7}
Хотя вы не можете просто взять любое регулярное выражение и создать любые строки, которые ему подходят, в этом случае вы можете легко адаптироваться и преодолеть.
Вы можете использовать glob
для создания комбинаций:
perl -lwe "print for glob '05{0,2,4,7}'"
050
052
054
057
Однако мне не нужно было говорить вам, что \d{7}
на самом деле означает довольно много миллионов комбинаций, верно? Создание списка чисел тривиально, их форматирование можно выполнить с помощью sprintf
:
my @nums = map sprintf("%07d", $_), 0 .. 9_999_999;
Это предполагает, что вы ищете только числа 0-9.
Возьмите эти числа и объедините их с глобусами: Тада.
[class]
Затем есть способ сгенерировать все (четыре миллиарда) совпадений для этого определенного регулярного выражения, а именно 05[0247]\d{7}
:
use Modern::Perl;
for my $x (qw{0 2 4 7}) {
say "05$x" . sprintf '%07d', $_ for 0 .. 9999999;
}