perl:特定の文字列を"含まない"場合にマッチする正規表現

| コメント(0) | トラックバック(0)
こういった場合、今まで

-------------------------------------------------
##直後に"mogemoge"含まない文字列にマッチ

$str =~ /hogehoge[^(mogemoge)]/;

-------------------------------------------------

これでいけたような気がしたんだが、久々に同じような処理を書いてみたら
これではダメだった。

前回はなんでうまくいったのか分からないが、クラスのマッチはやはり
一文字分しか指定できないらしいので、セオリーどおり、否定先読みを使う。


-------------------------------------------------
##直後に"mogemoge"含まない文字列にマッチ

$str =~ /hogehoge(?!mogemoge)/;



##"mogemoge"の部分はさらに正規表現を使ったり、変数を使ったりもできる

my $later = "moge";

$str1 = "hogehoge";
$str2 = "hogehogemogemoge";

$str1 =~ s/hogehoge(?!($later){1,})/oeoe/;
$str2 =~ s/hogehoge(?!($later){1,})/oeoe/;

print $str1."
".$str2;


結果:
hogehogeoeoe
hogehogemogemoge
-------------------------------------------------

逆に、特定の文字列を後方に含む場合は

(?!mogemoge) を (?=mogemoge)

にかればいいだけ。

トラックバック(0)

トラックバックURL: http://www.igreks.jp/blog/mt-tb.cgi/328

コメントする