以下に簡単な例を示します。
sc = StringScanner.new( string ) while sc.rest? do sc.skip /\A\s+/ if tmp = sc.scan( /\A\w+/ ) then puts tmp end endこのコードは、文字列から単語を切りだし、それを表示します。
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>