3

私はperlが初めてなので、正規表現に一致するすべての組み合わせを生成する方法があるかどうか知りたいと思っていました.

に一致するすべての文字列を生成する最良の方法は次のとおりです。

05[0,2,4,7][\d]{7}

前もって感謝します。

4

4 に答える 4

5

任意の正規表現を取得して、適合する可能性のある文字列を生成することはできませんが、この場合は簡単に適応して克服できます。

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 の数値のみを探していると仮定しています。

それらの数字を取り、それらをグロブ化されたものと組み合わせます:多田。

于 2012-05-19T14:22:43.723 に答える
4

いいえ、特定の正規表現に対してすべての一致を生成する方法はありません。これを考慮してください:

a+

その正規表現には無数の一致があるため、すべてをリストすることはできません。

ところで、正規表現を次のようにしたいと思います。

05[0247]\d{7}
于 2012-05-19T13:27:28.730 に答える
3

2012年回答

于 2012-05-19T14:53:50.073 に答える
1

次に、この特定の正規表現、つまり、すべて (40 億) の一致を生成する方法があり05[0247]\d{7}ます。

use Modern::Perl;

for my $x (qw{0 2 4 7}) {
    say "05$x" . sprintf '%07d', $_ for 0 .. 9999999;
}
于 2012-05-20T04:53:50.100 に答える