2009-10-19から1日間の記事一覧

Schemeの数値リテラルにマッチする正規表現(4)

鬼車の,名前付きキャプチャがあると()がキャプチャしなくなるのを利用して1969bytes.これ以上は部分式呼び出しを使わないと大幅な削減は厳しそう. いろいろキャプチャするバージョンは3061bytesになった.強欲マッチを止めれば2805bytes. 部分式呼び出し…

Schemeの数値リテラルにマッチする正規表現(3)

テストの仕方に問題があって,ある文字列にきっちりマッチするかどうかで確かめてたんだけど,トークンとして抜き出してくるにはそれでは不適切なことがわかった.そこで肯定先読みを使って,区切り文字が続いてるかどうかを調べるようにした. それから,問…

Schemeの数値リテラルにマッチする正規表現(2)

短くしてたんだけど,\dが使えない所為で1割伸びた.2217bytes. /(?:(?:#b(?:#[ei])?|(?:#[ei])?#b)(?:(?:[+-]?(?:(?:[01]+#*)|(?:[01]+#*\/[01]+#*)) )|(?:[+-]?(?:(?:[01]+#*)|(?:[01]+#*\/[01]+#*))@[+-]?(?:(?:[01]+#*)|(?:[01]+#*\/[ 01]+#*)))|(?:[+-…

UTF8で\dが全角数字にマッチ

irb:0> /\d/ =~ "5" => 0 irb:0> /\d/.encoding => #<Encoding:US-ASCII> irb:0> /\d/n.encoding => #<Encoding:US-ASCII> irb:0> re = Regexp.new(/\d/.source.force_encoding(Encoding::ASCII_8BIT)) => /\d/ irb:0> re.encoding => #<Encoding:US-ASCII>ぎゃーす. irb:0> /\d(?:\x80(?!))?/n =~ "5".force_encodin</encoding:us-ascii></encoding:us-ascii></encoding:us-ascii>…