Strscan の使い方


基本的な使い方

以下に簡単な例を示します。


sc = StringScanner.new( string )
while sc.rest? do
  sc.skip /\A\s+/
  if tmp = sc.scan( /\A\w+/ ) then
    puts tmp
  end
end

このコードは、文字列から単語を切りだし、それを表示します。
StringScanner は文字列と「どこまでスキャンしたか」を示すポインタがセットに なったようなオブジェクトで、正規表現とのマッチをおこなってそのポインタを 進めていくことでスキャンを行います。

StringScanner の重要なメソッドは 3 つです。
scan は最も重要なメソッドで、与えられた正規表現がマッチする部分を切り出して 返します。skip はマッチした部分の先にポインタを進めるだけで、真偽値を返します。 empty? はポインタが最後までいったかどうかを真偽値で返すメソッドです。 rest? はその反対です。

scan を使った場合、どんな正規表現でも文字列の先頭にのみ マッチします。たとえば、/string/ の場合、先頭に 'string' という 文字列がある場合のみマッチします。これは、内部で使う関数が Ruby の デフォルトと違うからです。通常の Ruby の正規表現のような挙動をさせるには、 scan_until などの until 系メソッドを使います。

ただし、until 系メソッドでも文字列の途中だけを スキャンすることはできません。例えば次のような場合は、


s = StringScanner.new( "word1   word2" )
ret = s.scan_until( /\s+/ )

ret は "word1 " となり " " にはなりません。

Copyright (c) 1999,2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>