岩月と申します。
一行毎に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@...>