はちゅにっき

こっちのブログはまったり更新

正規表現ではまる

print "hogehoge\n\n" =~ /^\n$/ ? "true" : "false";
#=> false
p "hogehoge\n\n" =~ /^\n$/
# => 9

むむむ?Perl だと false なのに、Ruby だと true になる。
なんで?

と思っていたら、初めての Ruby に書いてあった。
Rubyでは「行頭≠文字列の先頭」かつ「行末≠文字列の末尾」らしい。
(改行文字が含まれると、そこで行が変わるってゆー風になってるみたい)
よって、今回の例だと、"\n\n" と2つ続いているので、空行が存在することになり、Ruby の方は true が返ってくると。
ふーん。
で、文字列の先頭とか、末尾を表す場合は "\A" と "\Z" を使うらしいよ。
つまり、上のコードで Perl と同じ結果を得るには

p "hogehoge\n\n" =~ /\A\n\Z/
# => nil

とすればいいみたい。