Rubyでの正規表現の否定

正規表現の否定をしたいと思い調べてみたところ

http://www-creators.com/archives/1827

このサイトがすぐにぶち当たった。

(?!PATTERN)

を使うことによってPATTERNを含まないという意味を持つ正規表現が作れるらしい。

 

実際に試してみた

aa = "abc333333"
bb = "333abc333333"


puts aa.match?(/abc/)

puts aa.match?(/(?!abc)/)

このコードを書いて実行してみた

$ ruby practice.rb

true

true

 

んんっ!?

全く否定の意味を持っていない

 

結果として

aa = "abc333333"
bb = "333abc333333"


puts aa.match?(/abc/)

puts aa.match?(/^(?!abc)/)

このコードを打つと

$ ruby practice.rb

true

false

 

うまくいった!!

よくわからないがおそらく(?! PATTERN)はPATTERNを一つの塊としてみることくらいの意味しかないのではないかと思う。

 

ちょっとまだよくわからないなあ、完璧に理解してる人がいればコメント欲しいです