Regular Expression(正規表現) Part16at TECH
Regular Expression(正規表現) Part16 - 暇つぶし2ch47:29
21/11/25 18:40:51.33 QsU6pq8j.net
Onigmo のバグの原因となった個所が判明したので書いておこう
正規表現における非包含オペレータの提案
URLリンク(staff.aist.go.jp)
この論文のサンプルコードに下記のメソッドがある
def try_alt(r1, r2, str, pos, &block)
try(r1, str, pos, &block)
try(r2, str, pos, &block)
end
これは正規表現で言うと r1|r2 の "|" にあたる動作をする部分のメソッドだが
このサンプルコードでは r1 のマッチが成功した後でも必ず r2 を試す仕様になっている
しかし Onigmo の検索方式では r1 がマッチした後に正規表現の最後までマッチが
成立した場合には r2 が試されない仕様になっている
これにより r2 を通る一部パターンが見落とされる結果となりバグとして出現した
論文中の非包含オペレータのメソッドである def try_absent(r, str, pos) は
上記の def try_alt を使う前提で書かれたものなのでこれをそのまま Onigmo には移植出来ない
サンプルコード方式での処理量を考えるとおそらくこれとはまったく別のアルゴリズムで動く
動作の軽いメソッドを自作しないと Onigmo には導入出来ないのではないだろうか..


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch