作者: Hiroyuki Iwatsuki
日時: 2005/11/14(23:59)
岩月と申します。

一行毎にStringScannerオブジェクトを作っているのが
もったいない気もしますが、strscanを使うならこんな感じに
書くのではないかなあと思いました。

require "strscan"
while gets
  s = StringScanner.new($_.chomp)
  while s.rest?
    if    s.scan(/\d+\b/)    then puts("number: #{s[0]}")
    elsif s.scan(/\w+/)      then puts("word: #{s[0]}")
    elsif s.scan(/\s+/)      then puts("space: `#{s[0]}'")
    elsif s.scan(/[^\w\d]+/) then puts("other: `#{s[0]}'")
    end
  end
end

動作確認:

123 abc!!def987a! # <= 入力行
number: 123
space: ` '
word: abc
other: `!!'
word: def987a
other: `!'

--
IWATSUKI Hiroyuki <URL:mailto:don@...>