正規表現_( ?! hoge )

タイトルにおいて、半角スペースを入れているがこれは読みやすくする為にいれている。

 

I␣(?!am|was|wasn't)

※␣:半角スペース

上記にマッチするパターンは下記3つ以外。下記3つにはマッチしない。

I␣am

I␣was

I␣wasn't

つまり、「 I␣ 」の直後に「 am 」「 was 」「 wasn't 」が
存在する文字列にはマッチしない
I␣don't などの 「 I␣ 」にはマッチする。

 

 

I␣don't を除いた「 I␣ 」にマッチさせたい場合は

hoge(?!I␣don't)I␣

 

hogeI␣am

hogeI␣was

hogeI␣wasn't

などの「hogeI␣ 」にはマッチする。

hogeの右側に「 I␣don't が存在しない」という位置の直後
「I␣」が続くことを要請している。

 

まとめ

 fuga(?!pattern)pattern2 は、

1.fuga の右側に pattern が存在しない

且つ

2.fuga の直後に pattern2 が存在する

場合にマッチする。

 

<<Memo>>
文全体をマッチさせたい時は、
「^.*(I␣(?!am|was|wasn't)).*$」 とする。 

f:id:koshinRan:20170208150133j:plain

 

(?=pattern) の否定形が (?!pattern)
というだけのこと。! は否定の意味。
前の特定の文字列を含まないの正規表現の意味がやっと分かった。
以上。

koshinran.hateblo.jp