Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】MatchData::offset()メソッドの使い方

offsetメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

offsetメソッドは、正規表現のマッチ結果を表すMatchDataオブジェクトに対して、マッチした部分文字列の開始位置と終了位置をバイト単位で取得するために使用するメソッドです。

このメソッドは、引数を指定することで、正規表現全体のマッチ部分、または特定のキャプチャグループが文字列のどこに位置していたかを示す数値のペア[開始位置, 終了位置]を返します。引数を省略した場合や0を指定した場合は、正規表現全体がマッチした部分のオフセット($&に相当する部分)を返します。1以上の整数を指定した場合は、そのインデックスに対応するキャプチャグループ(例えば1なら$1)のマッチ部分のオフセットを返します。また、名前付きキャプチャを使用している場合は、そのキャプチャ名を引数として指定することもできます。

戻り値の配列における開始位置は、マッチした部分の最初の文字のバイトインデックス(元の文字列の先頭からのバイト数)を示します。終了位置は、マッチした部分の直後の文字のバイトインデックスを示します。したがって、終了位置から開始位置を引くことで、マッチした部分文字列のバイト長がわかります。

もし、指定されたインデックスや名前のキャプチャグループがマッチしなかった場合、このメソッドは[nil, nil]を返します。このoffsetメソッドを利用することで、正規表現によって見つけ出した文字列が元の文字列のどの範囲に存在するかを正確に数値で把握し、その情報をプログラムで活用することが可能になります。

構文(syntax)

1text = "Ruby is fun"
2match_data = text.match(/R(ub)y (is) (fun)/)
3puts match_data.offset(0)
4puts match_data.offset(1)
5puts match_data.offset(2)
6puts match_data.offset(3)

引数(parameters)

group

  • group: 取得したいマッチのグループ番号を指定する整数

戻り値(return)

[Integer, Integer]

マッチした部分の開始位置と長さを表す2つの整数を配列で返します。

関連コンテンツ