情報科学概論
2000.6.6


  1. 本日の作業内容

  2. 正規表現の活用例

    前回の授業より正規表現によるテキスト処理が始まったが、この正規表現はファイル名やファイル内容、webのコンテンツなど幅広い分野で利用されている重要な概念である。実際、正規表現を知っているとRubyのようなスクリプト言語以外でも役に立つことが多い。ここでは、正規表現ではないが、同じような考え方で文字列の一般化を行うような例もいくつか挙げて実際の利用について説明する。


  3. Ruby入門

    • 2.14.2 パターンマッチ

      上でメタ文字の活用など基本的なことを見てきたが、本格的な正規表現を用いることにより、より的確な文字列選択が行えるので、スクリプト言語で文字列を処理する際には是非とも覚えておくのが望ましい。以下に、教科書に沿って補足をする。


      1文字マッチ

      指定された1文字にそのままマッチするか、「.」を用いた場合には任意の文字に一文字マッチするような場合である。注意するのは、必ずしも文字列の先頭にある必要はないことで、途中に出てきてもマッチする。

      マッチの実際を確かめるためには、例えば、以下のようなスクリプトを実行してみる。

      #!/usr/bin/ruby
      
      /[a-z]/ =~ "abced"
      print $&, "\n"
      
      上記のスクリプトにおいて、$&はp.79の表2-9に出ている「マッチした部分」である。上の例では、a-zまでのアルファベットのどれか一文字にマッチする条件であるので、文字列abcdeの最初のaにマッチする。よって、出力結果はaとなる。


      グルーピング

      教科書p.76の下の方に、「Rubyの通常の文字列を表現を表す正規表現」という言葉が出てきて、

      /(["'`]).*?\1/

      となるとある。これに関しては説明が必要で、この正規表現を分解すると、まず、[]の中に、引用符が3つあることがわかる。p.68で見たように、文字列を示す引用符には3種類あったのでそれがここでの[]の中身に対応している。次は「.*?」であるので、任意の一文字の0回以上の繰り返しである。これは任意の文字列という意味である。最後に、\1によって、最初にマッチした部分を指定するので、始まりが”であれば終わりも”となり、’ならば’のように対応する。すなわち、Rubyの文字列が必ず引用符でくくられているので引用符の間に存在する任意の文字列ということで、文字列が指定できる。

      マッチ後の変数参照も以下に例を挙げておく。

      #!/usr/bin/ruby
      
      /^(.*?):/ =~ "http://www.ecs.shimane-u.ac.jp"
      print $1, "\n"
      


      オプション

      教科書p.78にある日付の正規表現は、まず、

      $ date

      として、表示される日付を確認する。すると、曜日、月、日、時刻、(タイムゾーン)、年の順に表示されることがわかる。その表現を正規表現に当てはめると教科書のようになることを意味している。分解すると、初めに曜日をアルファベット3文字で表示する。また、ここでは曜日を4文字以上で表記する場合にも対応させており、カンマを付ける表記法も考慮してある。空白の次に月を3文字で表示、空白、日付を一桁もしくは二桁で表示、空白、数字もしくは:(コロン)の繰り返しの後の空白、最後に4桁の年号となっている。これは、上記の日付の形式に対応しているが、さらに、

      Tuesday, June 6 10:30:00 2000

      にも対応していることに注意する必要がある。すなわち、+で指定された繰り返しの条件があるので、曜日や月が3文字とは限らない。


  4. 課題

    授業の進み具合によって課題を課すのでアナウンスに注意すること。


ページの先頭に戻る

目次ページに戻る