正規表現検索の練習

最初に作成した 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 メソッドに渡して正規表現 にしている。

  1. ひらがなを含む行の検索

    ひらがなは正規表現 [ぁ-ん] で表現できる。

    % ./meibosearch.rb meibo.txt
    検索パターン: [ぁ-ん]
    サトウ ムネユキ SATOH Muneyuki  さとう宗幸  青葉台
    サイトウ テツヤ SAITOH Tetsuya  斎藤徹夜    白夜の国
    
  2. 「サ」で始まる人全てを検索

    行の先頭は ^ で指定する。^サ とすると 行の先頭が「サ」で始まるもののみにマッチする。

    % ./meibosearch.rb meibo.txt
    検索パターン: ^サ
    サトウ ムネユキ SATOH Muneyuki  さとう宗幸  青葉台
    サイトウ テツヤ SAITOH Tetsuya  斎藤徹夜    白夜の国
    
  3. 同じ文字(空白以外)が繰り返す行の検索

    グルーピングを使うと繰り返しを記述できる。空白以外の文字は \S である。これを括弧でグルーピングして、\数字 で参照すれば良い。正規表現は (\S)\1 となる。

    % ./meibosearch.rb meibo.txt
    検索パターン: (\S)\1
    イイモリ ハナコ IIMORI Hanako   飯森花子    飯森山
    

    「イ」が2字連続で出てくるのでこれにマッチする。


本日の目次