• ベストアンサー

正規表現ですが・・・

正規表現なんですが(Perlです。) Aa_abcd_aa.txt Aa_abcd_bb.txt Aa_abcd_cc.txt Bb_abcd.txt 上記のabcdの部分をマッチさせるために (?<=Aa_|Bb_).*(?=_aa|_bb|_cc|\.txt) としてみましたが、これでは Aa_abcd_aa.txt Aa_abcd_bb.txt Aa_abcd_cc.txt のabcd_aaやabcd_bbやabcd_ccとマッチしてしまいます。 なにかよい表現の仕方はありますか? まとめてマッチさせる表現が知りたいです。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

こう? use strict; use warnings; my $pat = qr{(?<=Aa_|Bb_) .*? (?= (?: _ (?:aa|bb|cc))? \.txt)}x; while (<DATA>) { print $&,"\n" if /$pat/; } __END__ Aa_abcd_aa.txt Aa_abcd_bb.txt Aa_abcd_cc.txt Aa_abcd_zz.txt Bb_abcd.txt 実行結果: abcd abcd abcd abcd_zz abcd _aa, _bb, _cc 以外の_ + 二文字のパターンをどうするか わからないので適当にやりました。

orange_re
質問者

お礼

できました!! ありがとうございます。