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

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

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

作成日: 更新日:

基本的な使い方

search_fullメソッドは、StringScannerクラスに属し、指定した正規表現に基づいて文字列を検索するメソッドです。このメソッドは、StringScannerオブジェクトが現在指している位置から、引数で与えられた正規表現パターンに合致する部分を探し出します。

第一引数には検索する正規表現パターンを指定します。第二引数pre_matchと第三引数post_matchは、それぞれtrueに設定すると、検索に成功した際に一致した部分の「前の文字列」と「後ろの文字列」を取得できるようになります。

検索に成功した場合、このメソッドは一致した文字列の長さを整数で返します。もし一致する部分が見つからなかった場合はnilを返します。

特に、pre_matchまたはpost_matchtrueに設定して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 を返します。

関連コンテンツ

関連プログラミング言語