⛳
[Feature #20576] バイト単位でのマッチした位置を返す MatchData#bytebegin/byteend を追加する提案
[Feature #20576] Add MatchData#bytebegin and MatchData#byteend
- バイト単位でのマッチした位置情報を返す
MatchData#bytebegin / byteendメソッドを追加する提案 - 以下のようなイメージ
result = /(\d+)年(\d+)月/.match("2021年1月")
# 既存の MatchData#begin / end は文字単位の位置を返す
# なので『月』でマッチした位置は以下のような文字の位置を返す
pp result.begin(2) # => 5
pp result.end(2) # => 6
# bytebegin / end はこれの byte 単位での位置情報を返す
pp result.bytebegin(2) # => 7
pp result.byteend(2) # => 8
- 現状でもバイト単位ので位置情報は
MatchData#byteoffsetで取得はできるけど先頭と終端をそれぞれ別々に取得する場合には個別のメソッドで定義されている方がパフォーマンスの改善にもつながるとのこと
result = /(\d+)年(\d+)月/.match("2021年1月")
pp result.byteoffset(2)
# => [7, 8]
- matz 的には機能を追加する事自体には同意だけど
#bytebegin / byteendの名前をどうするのかの話がでてますねー
Discussion