最長マッチ

鬼車の検索時オプション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が本当の最長マッチではなく、最左最長マッチなのでこうなってしまう。仕方がないので、今から最長マッチになるように改修してみる。