最初に作成した 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字連続で出てくるのでこれにマッチする。