最長マッチ
鬼車の検索時オプションONIG_OPTION_FIND_LONGESTとONIG_OPTION_FIND_NOT_EMPTYをRubyから指定できるようにパッチを書いている人がいるらしい。
そのことはどうでもよいのだが、ONIG_OPTION_FIND_LONGESTの振る舞いに疑問をもたれてしまった。(f:not empty, l:longest)
p "abc"[/(|b|bc)/] #-> "" p "abc"[/(|b|bc)/l] #-> "" p "abc"[/(|b|bc)/f] #-> "b" p "abc"[/(|b|bc)/lf] #-> "bc"
これはONIG_OPTION_FIND_LONGESTが本当の最長マッチではなく、最左最長マッチなのでこうなってしまう。仕方がないので、今から最長マッチになるように改修してみる。