• ベストアンサー

正規表現の展開

特定の正規表現にマッチする全パターンを出力する方法、もしくはCPANモジュールは無いでしょうか。 例えば、 my $pattern = "[a-z]"; some_sub($pattern); # 出力: a, b, c, d, e, f, g, h, i...z 以上、どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.3

ASCII 1文字限定で良ければ... sub some_sub{ my $re = shift; my @ret = (); foreach my $code (0 .. 0x7f) { my $chr = chr($code); if( $chr =~ m/$re/ ) { push(@ret, $chr); } } return @ret; } 制御文字を含む正規表現を書いた時は、結果をそのままprintするのはやめましょうね。 ASCII 1文字限定で不足なら、私にはできません。

noname#256190
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

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

noname#256190
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

有限の場合でも 例えば未定義の文字エンコード方式に対応した場合で プリンタブルじゃない領域も含めると一文字で255パターン。 2文字で65536パターン。3文字で・・16777216・・・。 メモリが足りなくなりますが・・。ディスクに展開?

noname#256190
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

仮に作る場合を考えた時、その程度なら展開出来るけど。 もっと多くなると無茶すぐる。 無限の場合もありーの。 有限の場合だけ全展開とか?

noname#256190
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • 正規表現について教えて下さい

    正規表現について教えて下さい $string = "LibrayMyUtil2File AppFile"; $pattern = '/([A-Z][a-z0-9]*)*([A-Z][a-z0-9]*)File/'; $replacement = '$2'; echo preg_replace($pattern, $replacement, $string);//Util2 App と表示される この例のように、「File」の前の単語に置き換えたいのですが、 このやり方だとpatternの「[A-Z][a-z0-9]*」が重複しているのが凡長だと思ってまして もっと短縮された書き方があれば教えてもらいたいです。

    • ベストアンサー
    • PHP
  • 正規表現について

    正規表現で、「空白またはa~zの中の1文字」を表すには[ a-z]でよいのでしょうか?

  • メルアドをチェックする正規表現?

    こんにちは,よろしくお願いします。JavaScriptでメルアドをチェックしようと次のような文字列を,patternという変数に代入して, var pattern = "^[a-z0-9\-_.]+@[a-z\-]+(\.[a-z\-]+)*com|net|org|edu|gov|mil|int|info|biz|name|pro|museum|aero|coop|[a-z][a-z]$"; 次のようにチェックしたのですが, if(mail.match(pattern)){・・・ "aa"など,2つ以上の小文字のアルファベット文字列にマッチしてしまいます。つまり,@が入っていなくてもマッチしてしまいます。実は,正規表現の解説書を見てこのような文字列としたのですが,JavaScriptでは不都合な点があるのでしょうか?ご存知の方がいらっしゃいましたら,ご教授ください。よろしくお願いします。

  • 正規表現について

    正規表現について質問が有ります。 プログラミング初心者なので、根本的な間違い等も犯している可能性もありますがご了承下さい。 今、javascriptを使ってフォームに入力されたメールアドレスの入力チェックを行おうとしています。 とりあえずはwebを漁って見つけたソースでチェックできる様にはなったのですが、もうちょっと拡張したいと思った所、つまずいてしまいました。 元のソースは if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/){ alert("error"); } という風にチェックをしており、 ******(@マークが無い) ***@(@の後半が無い) @***(@の前半が無い) などの基本的な形式に対してはチェックを行う様になっています。 しかし、hoge@hogeの様に書くと、適当に書いたドメインでもスルーしてしまいます。 そこで、ドメインのチェックも行おうとしているのですが、ここで詰まっています。 ちなみに今回は携帯のアドレスに限定してチェックを行おうと思っています。 javascriptでの正規表現について書いてあるページを見ながら下の様に書いたのですが上手く動作してくれません。 正規表現の書き方がおかしいのだろうとは思うのですが、どこがいけないのかよく分かりません。 if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/) || /*ここから下を追加*/ (!this.value.match(/@(docomo|ezweb|softbank)\.ne\.jp$/) || !this.value.match(/@i\.softbank\.jp$/)){ alert("error"); } 最初はもとからある基本的な入力形式のチェックを行い、また@後のドメインが携帯のドメインでない場合にエラーを返す。というつもりで書きました。 ですが、***@docomo.ne.jpとしてもエラーが返って来てしまいます。 原因を教えていただけますか? また、もとからあった正規表現が何をどういう指定しているのかもキチンとは理解していないので、教えていただけるとうれしいです。 よろしくお願いします。

  • Perlの正規表現に関する質問です。

    Perlの正規表現に関する質問です。 下記を実行した場合、$1~・・・には下記のどの正規表現に該当する値が入るの でしょうか? sub test{ my $text = shift; pos($$text) = undef; while ( $$text =~ m{ (\s*<) ( !-+ | !-+\s*(/|//)?\s*(.*?)\s*(/|//)?\s*-+ | (/)?([!a-z0-9\-]+)\s*((?:[a-z0-9\-]+\s*=\s*[\w\-/]+|[a-z0-9\-]+\s*=\s*".*?"|[a-z0-9\-]+\s*=\s*'.*?'|\s+[^<>]{2,})*)?\s*(/)? ) (>\s*) (.*?(?=(?:<!-+ | </?[a-z0-9\-!]+\s*(?:[a-z-]+\s*=\s*[\w\-/]+|[a-z0-9\-]+\s*=\s*".*?"|[a-z0-9\-]+\s*=\s*'.*?'|\s+[^>]{2,})*)\s*(/)?>?))? }sxgi ) { ・・・ }

    • ベストアンサー
    • Perl
  • 正規表現の実行レポートは作成可能でしょうか?

    開発言語:Perl(Win32) ヴァージョン:5.8.4.810 perl.exeのプロパティー参照 長文の正規表現にパターンマッチを試みているのですが、 本来マッチするはずの文字列に対して、マッチしません。 しかし、正規表現が長文のため、なかなかデバッグが進みません。 どのように、パターンマッチが進んでいるか見ることが出来ればデバック作業が早くなると思うのですが、 私はその方法を知りません。 そこで、質問なのですが、Perlが正規表現をどのように解釈して、パターンマッチを進めているか、確認する方法はないのでしょうか? できれば、パターンマッチ実行中、解釈している位置と、文字列をレポートとして出力する方法があれば、それを知りたいと思います。

    • ベストアンサー
    • Perl
  • 正規表現の表現パターンについて教えて下さい。

    こんばんわ、正規表現を使ってある文字列を検索するプログラムを勉強していたのですが、 eregi('(http://|https://)[a-z0-9./_\-]+',第二引数、第三引数) となっていたのですが、第一引数の最後の + の部分はどうゆう意味があるのでしょうか? 僕の理解では[ ]の間が検索する正規表現のパターンだと思っているのですが、、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現について

    正規表現について質問をさせていただきます。 VB6.0にて正規表現を使用し、入力された文字のチェックを行っていますが どうしてもうまくいきません。 チェックしたい文字は A(半角アルファベット大文字1文字)または AAA(半角アルファベット大文字3文字)または (AAA)(半角カッコつき半角アルファベット大文字3文字)で 上記3パターン以外はエラーとしたいと思っています。 パターンは下記のように作成したのですが "(^[\(][A-Z]{3}[\)])|(^[A-Z]{1,3})" A、AAA、(AAA)以外でもA(AA)やAAAA等も正常ケースとして通過してしまいます。 パターンをどのように作成すればよいか教えて下さい。 よろしくお願いします。

  • シェルで使われる正規表現について

    シェル(UNIX)で使われる正規表現ですが、 メタ文字に、アスタリスク「*」があるのですが、 「A*Z」と「Ab*Z」でマッチするパターンですが、 例えば、以下の様な文字列があるとします。 AZ AbZ AbcZ AbcdZ AbcdeZ 「A*Z」でマッチさせると AZ AbZ AbcZ AbcdZ AbcdeZ となり、 「Ab*Z」でマッチさせると AZ AbZ となります。 何故、「A*Z」ではすべてがマッチの対象になるのですか。

「DCP-J1200N」の不具合
このQ&Aのポイント
  • DCP-J1200Nの印刷とスキャンができないトラブルについて相談します。
  • Windows10でUSBケーブル接続されており、トレイ1への用紙送りエラーが表示されます。
  • 特に関連するソフト・アプリはありませんが、ワイマックス回線を利用しています。
回答を見る