[Feature #20576] バイト単位でのマッチした位置を返す MatchData#bytebegin/byteend を追加する提案

2024/06/15に公開

[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]
GitHubで編集を提案

Discussion