例題 2テキストファイルを入力として, その中で次のパターンが登場する行のみを表示する Perl スクリプト find_pattern.pl を作りなさい:(パターン) 「数字が 1 文字以上登場し, その後ろに ax または by が登場する.途中に空白は入らない.」 例えば, 8525ax ... OK 089927xxxx ... NG(ax も by も登場しない) yyy089927byxxxx ... OK(089927by が含まれる) xyzby ... NG(byの直前に数字がない)
(実行例)
解答例while ( $line = <> ){ if ( $line =~ /\d+(ax|by)/ ){ print $line; } } 解説(1)数字まず,「数字」というパターンをどうやって指定するか説明する. 数字ということは 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 という 10 種類の文字の中のどれかということになる. これに対し,当然ながら if 文を 10 個書くというのは現実的でない. この場合,「0 から 9 の中のどれか 1 つ」を表す便利なパターン表記がある: [0-9]また,これは特別に
\d
と書いてよいことになっている.
そこで「1 桁の数字」を「\d」で表すことにする.
(2)1 回以上の登場
\d+
と書ける.
(3)ax または by の登場
(ax|by)
もちろん,この書き方を(1)に適用してもよい:
(0|1|2|3|4|5|6|7|8|9)しかし,こちらの場合は \d と書くか [0-9] と書く方が圧倒的に容易であろう. (参考)文字集合の表現
|