最初に作成した meibo.txt のデータ
サトウ ムネユキ SATOH Muneyuki さとう胸幸 青葉台 コウエキ タロウ KOEKI Taro 公益太郎 酒田 イイモリ ハナコ IIMORI Hanako 飯森花子 飯森山 サイトウ テツヤ SAITOH Tetsuya 斎藤徹夜 白夜の国
を利用して、いくつか検索練習してみよう。
利用するプログラムは、さきほどの
saito.rb
#!/usr/koeki/bin/ruby
while line=gets
if /sai?toh/i =~ line
print line
end
end
だと決まったパターンしか検索できないので以下のように変更しよう。
meibosearch.rb
#!/usr/koeki/bin/ruby
STDERR.print "検索パターン: "
regexp = Regexp.new(STDIN.gets.chomp!, true, "e")
while line=gets
if regexp =~ line
print line
end
end
プログラム中の、STDIN は、標準入力を意味する。
Rubyプログラム起動時にファイルを引数に与えると gets を利用
したときにそのファイルからデータを読む。しかし、STDIN.gets
で標準入力(この場合キーボード)から1行読む。これを、chomp!で
改行を切り取り、さらに Regexp.new メソッドに渡して正規表現
にしている。
ひらがなは正規表現 [ぁ-ん] で表現できる。
% ./meibosearch.rb meibo.txt 検索パターン: [ぁ-ん] サトウ ムネユキ SATOH Muneyuki さとう宗幸 青葉台 サイトウ テツヤ SAITOH Tetsuya 斎藤徹夜 白夜の国
行の先頭は ^ で指定する。^サ とすると
行の先頭が「サ」で始まるもののみにマッチする。
% ./meibosearch.rb meibo.txt 検索パターン: ^サ サトウ ムネユキ SATOH Muneyuki さとう宗幸 青葉台 サイトウ テツヤ SAITOH Tetsuya 斎藤徹夜 白夜の国
グルーピングを使うと繰り返しを記述できる。空白以外の文字は
\S である。これを括弧でグルーピングして、\数字
で参照すれば良い。正規表現は (\S)\1 となる。
% ./meibosearch.rb meibo.txt 検索パターン: (\S)\1 イイモリ ハナコ IIMORI Hanako 飯森花子 飯森山
「イ」が2字連続で出てくるのでこれにマッチする。