【Ruby3.x】StringScanner::scan_full()メソッドの使い方
scan_fullメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
scan_fullメソッドは、RubyのStringScannerオブジェクトが持つ機能の一つで、現在のスキャン位置から指定された正規表現に合致する部分を探索し、その結果に応じて処理を実行するメソッドです。StringScannerクラスは、長い文字列を効率的に順次解析し、特定の部分を切り出したりパターンをチェックしたりするために利用されます。
このメソッドは、第一引数に探索の基準となる正規表現(regexp)を受け取り、第二引数にはオプションでスキャン位置を示すポインタを進めるかどうかを制御する真偽値(advance_ptr)を指定できます。もし文字列の現在のスキャン位置から正規表現パターンに合致する部分が見つかった場合、scan_fullメソッドはその合致した部分文字列を返します。そして、第二引数のadvance_ptrがtrue(これがデフォルト値です)であれば、スキャン位置を示すポインタは合致した部分の直後へと自動的に進められます。これにより、次のスキャンは合致部分のすぐ後ろから開始されます。
一方で、もし指定された正規表現パターンに合致する部分が現在のスキャン位置から見つからなかった場合、scan_fullメソッドはnilを返します。この場合、スキャン位置を示すポインタは一切移動せず、現在の位置に留まります。
特に重要なのは、advance_ptrにfalseを指定した場合の挙動です。この設定では、正規表現に合致する部分が見つかって文字列が返されたとしても、StringScannerオブジェクトのポインタは現在の位置から移動しません。これは、一度マッチした部分を再度処理したり、異なる正規表現で同じ位置を再度試したりする場合に非常に役立ちます。例えば、特定のキーワードの有無だけを確認し、その後の解析のためにポインタをその場に留めておきたいケースなどで利用でき、柔軟な文字列解析が可能となります。
構文(syntax)
1require 'strscan' 2 3scanner = StringScanner.new("Hello Ruby") 4result = scanner.scan_full(/Hello/, true, false)
引数(parameters)
pattern, return_string, advance_pointer
- pattern: 検索する正規表現パターン。
- return_string: trueの場合、マッチした文字列を返します。falseの場合、nilを返します。
- advance_pointer: trueの場合、スキャナーのポインターをマッチした位置まで進めます。falseの場合、ポインターは進みません。
戻り値(return)
Object
指定された正規表現にマッチする文字列全体が返されます。マッチしなかった場合はnilが返されます。