【Ruby3.x】MatchData::end()メソッドの使い方
endメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
endメソッドは、正規表現のマッチ結果を格納するMatchDataオブジェクトから、マッチした部分文字列の終了位置を取得するメソッドです。このメソッドは、あるパターンが元の文字列のどの位置でマッチを終えるのかを知りたい場合に利用されます。
引数を指定しない場合、または引数に0を指定した場合は、正規表現全体がマッチした部分(MatchDataオブジェクトの0番目の要素に相当する文字列)の終了位置を返します。例えば、「Hello Ruby!」という文字列に対して/Ruby/という正規表現がマッチした場合、match[0]は「Ruby」となり、このendメソッドは「Ruby」の終了位置を返します。
引数に1以上の整数を指定すると、その番号に対応するキャプチャグループ(正規表現中の括弧で囲まれた部分)がマッチした部分文字列の終了位置を返します。例えば、/H(ell)o (R)uby/という正規表現で「Hello Ruby!」がマッチした場合、end(1)は「ell」の終了位置を、end(2)は「R」の終了位置を返します。また、負の値を指定することで、キャプチャグループを逆順に数えたインデックスで指定することも可能です。
ここで返される終了位置は、元の文字列の先頭を0として数えたバイト単位のオフセットです。このオフセットは、マッチした部分文字列の「直後」の位置、つまりマッチした文字自体は含まず、その次に位置する文字の開始位置を指します。
もし、指定されたインデックスに対応するキャプチャグループが存在しない場合や、そのキャプチャグループがマッチしなかった場合は、nilを返します。このメソッドは、マッチした部分文字列の正確な長さを計算したり、マッチした部分の前後の文字列を特定して操作する際に非常に役立ちます。
構文(syntax)
1md = "hello ruby world".match(/(hello) (ruby) (world)/) 2md.end(2)
引数(parameters)
nth
- nth: Integer: マッチした部分文字列のN番目の終了位置を取得します。
戻り値(return)
Integer
マッチした部分の終了位置を示す整数を返します。