dポイントプレゼントキャンペーン実施中!

特定の正規表現にマッチする全パターンを出力する方法、もしくはCPANモジュールは無いでしょうか。

例えば、

my $pattern = "[a-z]";

some_sub($pattern);

# 出力: a, b, c, d, e, f, g, h, i...z

以上、どうぞよろしくお願い致します。

A 回答 (4件)

ASCII 1文字限定で良ければ...



subsome_sub{
my$re= shift;
my@ret= ();

foreachmy $code(0 .. 0x7f) {
my$chr= chr($code);
if($chr =~ m/$re/) {
push(@ret, $chr);
}
}

return@ret;
}

制御文字を含む正規表現を書いた時は、結果をそのままprintするのはやめましょうね。

ASCII 1文字限定で不足なら、私にはできません。
    • good
    • 0
この回答へのお礼

ありがとうございます。参考にさせていただきます。

お礼日時:2009/09/07 06:18

って~か, そもそも「/a/ にマッチする文字列」ですら無限に存在しますけどね.


ba なんかもマッチするし.
    • good
    • 0
この回答へのお礼

そうですね。実用的な用途としては、明白にレンジが限定されるものに限りますね。その一例として、[a-z]を挙げさせていただきました。

お礼日時:2009/09/07 06:20

有限の場合でも



例えば未定義の文字エンコード方式に対応した場合で
プリンタブルじゃない領域も含めると一文字で255パターン。
2文字で65536パターン。3文字で・・16777216・・・。

メモリが足りなくなりますが・・。ディスクに展開?
    • good
    • 0
この回答へのお礼

なるほど。未定義の文字エンコード方式については考えていませんでした。全パターンを展開するのは難しいですね。

お礼日時:2009/09/07 06:16

仮に作る場合を考えた時、その程度なら展開出来るけど。


もっと多くなると無茶すぐる。

無限の場合もありーの。

有限の場合だけ全展開とか?
    • good
    • 0
この回答へのお礼

そうですね。確かに*や+を使ったパターンの全展開は不可能ですね。
もう少し考え直してみます。

お礼日時:2009/09/07 06:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!