【Ruby3.x】StringScanner::values_at()メソッドの使い方
values_atメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
values_atメソッドは、StringScannerクラスに属し、直前に行われた正規表現のマッチング結果から、指定されたインデックスのサブマッチ(部分一致)を配列として取得するメソッドです。このメソッドは、StringScannerオブジェクトでscanやmatch?などのメソッドを使って正規表現によるマッチングが成功した後に利用されます。正規表現の中に含まれる括弧()で特定のパターンをキャプチャ(捕捉)した場合、そのキャプチャされた部分文字列を効率的に取り出すのに非常に便利です。
引数には、取得したいサブマッチのインデックス(番号)を指定します。インデックス0は正規表現全体のマッチ結果を、インデックス1からは括弧で囲まれた各キャプチャグループのマッチ結果を表します。複数のインデックスをカンマで区切って指定したり、範囲で指定することも可能です。もし直前のマッチングが失敗していた場合や、指定されたインデックスに対応するサブマッチが存在しない場合は、その要素はnilとなります。このメソッドを使うことで、一つの複雑な正規表現から、必要な複数の情報を抽出・整理し、後続の処理で活用することが容易になります。
構文(syntax)
1require 'strscan' 2 3scanner = StringScanner.new("first_value second_value third_value") 4scanner.scan(/(\w+)\s(\w+)\s(\w+)/) 5# StringScanner#captures はマッチしたキャプチャグループを配列で返します。 6# その配列に対して Array#values_at を使用して、指定したインデックスの要素を抽出します。 7scanner.captures.values_at(0, 2)
引数(parameters)
*args
- args: 取得したい値のインデックスを可変長引数で指定します
戻り値(return)
Array
指定されたインデックスに対応する文字列を要素とする配列を返します。