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を一つの塊としてみることくらいの意味しかないのではないかと思う。
ちょっとまだよくわからないなあ、完璧に理解してる人がいればコメント欲しいです