正規表現ワークショップ

今年度の藝大先端での授業(プログラミング演習)が始まった。例年1回めの授業は最後の授業から間があいてるのもありかなり緊張する。今年度は授業のカリキュラムが変わったのもありここ数年変えていなかった授業の進めかたや教えかたも変えていくつもりで、考えたり準備したりすることが多くなりそう。

今日は実際のプログラム演習の内容に入る前(まだ履修登録期間中で、受講生の入れ替わりがあるので)にイントロダクションとして、ちょうどイミテーションゲームが上映中なので映画と主人公であるアラン・チューリングの話をして、彼の考案したチューリングマシンとコンピュータの関係を説明したうえで、チューリングマシンが行うような記号処理を身近な形で体験してもらうために、「正規表現ワークショップ」をやってみた。こんな感じ。

  1. 正規表現とは「特定の文字の並び」を表現する特殊な記法であることなど概略を説明する
  2. http://www.regexr.com/ を開いてもらい使いかたをかるく説明する
  3. 正規表現の基本的な書式(選択、文字クラス、繰り返しなど)を説明しながらregexrで正規表現に文字がマッチする仕組みを試してもらう
  4. 「では腕試しに芸大の複数の書きかたにマッチする正規表現を考えてみましょう」
    • 「東京芸術大学」「東京藝術大学」「東京芸大」「芸大」「藝大」などにマッチする正規表現を考えてもらう
  5. https://www.debuggex.com/ を紹介する。正規表現のグラフ構造を確認して正規表現の構造を理解したりバグがないか確かめたりする
  6. 「今度は身の回りで複数の表記がある言葉を探して、それの正規表現を考えてみましょう」
    • まず複数の表記を列挙する
    • 全部にマッチする正規表現を書いてみる
    • うまくいかなかったらdebuggexで見てみる
  7. できた正規表現を掲示板に書き込んでもらい、他のひとの書いた正規表現が「読める」かどうか見ていく

正規表現で自分が決めた言葉のパターンが全部マッチするかどうか、というのはゲームっぽくもなるし興味も持ちやすくて、いきなりプログラムでコンピュータの実行過程を想像してもらうよりもよりコンピューターが何をしているか理解してもらいやすいんじゃないかと思っている。今日の授業でもみんな想像してたよりおもしろい題材を探してきて正規表現を書いていた。以下できた正規表現だけ書いてみます(書いてもらったそのものなので合ってないものもありますが)。

  • /(百|100)円?(ショップ|均一?)/
  • /先端(芸術表現)?科|I(nter)? ?M(edia)? ?A(rt)?/
  • /((ケンタ)((ッキー)(フライドチキン)?)?|kfc|KFC)/
  • /田中(孝太郎)?(先生|さん)/
  • (お〜い|静岡|緑)?(ティー|お?茶渋?)|あがり
  • /バレー(ボール)?/
  • /(東京)?(ディズニー)|(ランド|シー)/
  • /(meh|meh+)|ugh/
  • /[マ](ック|クド(ナルド)?)/
  • /(^(携帯)|スマ(ホ|ートフォン)(携帯)?)/
  • /(([1-2][0-9])|[1-9])?[0-9],(([1-2][0-9])|[1-9])?[0-9],(([1-2][0-9])|[1-9])?[0-9],/
  • /(マイルドセブン|マイセン)(・)?(ライト|ディースペック|スタイルプラス)?(スーパーライト|ワン)?(ボックス)?/
  • /赤|金|黒|マル|マー?ル)(マ(ー?ル|ル)|ボ(ー?ロ|ロ)|メ(ン|ラ))|マル/