• ベストアンサー

正規表現で、特定の範囲をチェックしない

閲覧ありがとうございます。 メタ文字?正規表現?の書き方を教えていただきたく思います。 :10※※※※※※:AAA :10※※※※※※:BBB :10※※※※※※:CCC 上記のような文字列のチェックをしたいのですが、※の部分は0-9とA-Zのランダムな組み合わせなので(文字数は固定)※の部分が何であっても引っかかるようにしたいのですが、この場合どのように記述をすればよいのでしょうか? どのような文字列でも引っかかる、もしくはどのような文字列であるか確認しない、というような表現の仕方はありますでしょうか?

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

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

. (ピリオド) 任意の1文字 [0-9A-Z] 0-9,A-Zのいずれか1文字 正規表現を調べればすぐ見つかると思います(ろくに調べてないでしょってこと)。

ryousuke1600
質問者

お礼

ありがとうございます。助かりました!

その他の回答 (1)

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.3

とりあえずPHPでいいのなら… $t = <<<EOM :10E3MWKR:AAA :10S6LBCF:BBB dummy string. :10J6FPED:CCC EOM; if ( preg_match('/\A:10(?:[0-9A-Z]{6}):([A-Z])\1\1\z/su',$t,$m) ) { echo 'found!'; var_dump($m); } else { echo 'not found...'; } ~こんな感じでマッチングさせられます。 P.S. 正規表現でも「"○○" が含まれない」は可能ですが通常は考えません。そのようなマッチングのさせ方を「否定先読み」と言いますが、実行時に膨大なメモリを消費するためあくまでも大道芸と言うか悪手として覚えて置くだけで、実際のプログラム内では使わないのが鉄則です。 どうしてもその様なマッチングが必要な時は、1回で処理するのでは無く、複数の正規表現を段階的にマッチングさせて目的のキーワードを取得する様にコードを書きます。必要ならば一時ファイルをメモリ上に書き出して通常正規表現でマッチングし易い様に加工(部分置換処理)してから抜き出します。

ryousuke1600
質問者

お礼

詳しく例題を入れていただきありがとうございます。 P.S.拝読させていただきました。自分はプログラムを組む人間ではないので詳しくわからないですが、なるほど確かに処理によって重い軽いは分かれそうですね。同じ処理結果でもいろんな書き方があるんですね・・・! ありがとうございました!

関連するQ&A