[過去ログ]
Regular Expression(正規表現) Part16 (1002レス)
Regular Expression(正規表現) Part16 http://mevius.5ch.net/test/read.cgi/tech/1635936601/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
47: 29 [sage] 2021/11/25(木) 18:40:51.33 ID:QsU6pq8j Onigmo のバグの原因となった個所が判明したので書いておこう 正規表現における非包含オペレータの提案 ttps://staff.aist.go.jp/tanaka-akira/pub/prosym49-akr-paper.pdf この論文のサンプルコードに下記のメソッドがある 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 には導入出来ないのではないだろうか.. http://mevius.5ch.net/test/read.cgi/tech/1635936601/47
48: 29 [sage] 2021/11/25(木) 19:06:15.35 ID:QsU6pq8j 論文3ページ目の右半分に 表3 がある r1r2 | [:seq, r1, r2] ここの :seq は r1 と r2 を連接するという意味で使われているが サンプルコードでは :seq を使わず :cat になっている ここで疑問なのが何故違う名前を使うことになったのか? である (仮説1) 非包含オペレータ提案者さんは猫が好き ごろにゃんしながらバックトラックにゃん である (仮説2) cat は Unix でよく使われる連結コマンドであり catenate から由来する これもなかなかの難問である http://mevius.5ch.net/test/read.cgi/tech/1635936601/48
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.033s