列のデータには同じカテゴリーのデータが含まれている。 station.dat なら、駅名、都道府県、かな、アルファベットと並んでいる。 県に存在し、 ma または ta で終わる地名を探すには
%./std_regexp.rb station.dat
検索パターン : (\S+県)\s+(\S+)\s+(\S+[mt]a)$
新潟 | 新潟県 | にいがた | Niigata |
小山 | 栃木県 | おやま | Oyama |
郡山 | 福島県 | こおりやま | Koriyama |
福島 | 福島県 | ふくしま | Fukushima |
高畠 | 山形県 | たかはた | Takahata |
山形 | 山形県 | やまがた | Yamagata |
村山 | 山形県 | むらやま | Murayama |
新発田 | 新潟県 | しばた | Shibata |
酒田 | 山形県 | さかた | Sakata |
象潟 | 秋田県 | きさかた | Kisakata |
秋田 | 秋田県 | あきた | Akita |
升形 | 山形県 | ますかた | Masukata |
東酒田 | 山形県 | ひがしさかた | Higashisakata |
文字列の切り取りを復習しておこう。
\S+ |
空白文字以外の文字列が 1 個以上並んでいるものを探す |
\s+ |
空白文字が 1 個以上並んでいるものを探す |
これを組み合わせ、
県 空白 よみがな 空白 アルファベット [mt]a$
を作った。 遠い位置にあるデータの条件とを組み合わせて検索することができるようになる。 データの列と空白文字列を分解するとき、 () を使う。
% ./std_regexp.rb station.dat
検索パターン : (\S+県)\s+(\S+)\s+(\S+[mt]a)$
と書くことにする。次にこのデータの列を切り出す方法を学ぶ。
上野駅から出発する。 最後の駅が no で終わる駅を探したい。 このように東京都に属する駅を除いて駅名を探すときにこれが使える。 実際試し、何駅が検索されるか調べよ。