【Ruby3.x】StringScanner::search_full()メソッドの使い方
search_fullメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
search_fullメソッドは、StringScannerクラスに属し、指定した正規表現に基づいて文字列を検索するメソッドです。このメソッドは、StringScannerオブジェクトが現在指している位置から、引数で与えられた正規表現パターンに合致する部分を探し出します。
第一引数には検索する正規表現パターンを指定します。第二引数pre_matchと第三引数post_matchは、それぞれtrueに設定すると、検索に成功した際に一致した部分の「前の文字列」と「後ろの文字列」を取得できるようになります。
検索に成功した場合、このメソッドは一致した文字列の長さを整数で返します。もし一致する部分が見つからなかった場合はnilを返します。
特に、pre_matchまたはpost_matchをtrueに設定してsearch_fullを実行すると、StringScanner.matched(一致した文字列自体)、StringScanner.pre_match(一致部分より前の文字列)、StringScanner.post_match(一致部分より後の文字列)といった、StringScannerクラスが提供する特殊なクラス変数に、それぞれ対応する文字列が自動的に代入されます。これにより、一致した部分だけでなく、その前後のコンテキスト情報も簡単に取得できるようになります。
この機能は、ログファイルから特定のエラーメッセージとその前後の文脈を抽出したい場合や、複雑なテキストデータから特定のフォーマットを持つ情報を効率的に解析したい場合に非常に役立ちます。文字列のスキャン位置は、一致した部分の直後に自動的に進むため、連続した検索処理をスムーズに行うことができます。
構文(syntax)
1require 'strscan' 2 3s = StringScanner.new('Hello Ruby world.') 4 5# StringScanner#search_full(pattern, forward_pos, backward_pos) 6# 例: 'Ruby' を検索し、マッチした場合に 1 を返す。 7s.search_full(/Ruby/, 1, 0) 8 9# 例: 'Python' を検索し、マッチしない。 10s.pos = 0 # スキャンポインタをリセット 11s.search_full(/Python/, 1, 0)
引数(parameters)
pattern, advance = true, get_match = true
- pattern: 検索する正規表現または文字列
- advance = true: trueの場合、マッチした位置までスキャナを進めます
- get_match = true: trueの場合、マッチした文字列を返します
戻り値(return)
Integer | nil
指定された正規表現にマッチした最初の位置を返します。マッチしなかった場合は nil を返します。