- ベストアンサー
正規表現で、特定の範囲をチェックしない
閲覧ありがとうございます。 メタ文字?正規表現?の書き方を教えていただきたく思います。 :10※※※※※※:AAA :10※※※※※※:BBB :10※※※※※※:CCC 上記のような文字列のチェックをしたいのですが、※の部分は0-9とA-Zのランダムな組み合わせなので(文字数は固定)※の部分が何であっても引っかかるようにしたいのですが、この場合どのように記述をすればよいのでしょうか? どのような文字列でも引っかかる、もしくはどのような文字列であるか確認しない、というような表現の仕方はありますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
. (ピリオド) 任意の1文字 [0-9A-Z] 0-9,A-Zのいずれか1文字 正規表現を調べればすぐ見つかると思います(ろくに調べてないでしょってこと)。
その他の回答 (1)
- 4017B
- ベストアンサー率73% (1336/1814)
とりあえず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回で処理するのでは無く、複数の正規表現を段階的にマッチングさせて目的のキーワードを取得する様にコードを書きます。必要ならば一時ファイルをメモリ上に書き出して通常正規表現でマッチングし易い様に加工(部分置換処理)してから抜き出します。
お礼
詳しく例題を入れていただきありがとうございます。 P.S.拝読させていただきました。自分はプログラムを組む人間ではないので詳しくわからないですが、なるほど確かに処理によって重い軽いは分かれそうですね。同じ処理結果でもいろんな書き方があるんですね・・・! ありがとうございました!
お礼
ありがとうございます。助かりました!