暮らしの中の、もよう
最初の約束を、回収する
レッスン1で、こんな話をしました。あなたは「090-1234-5678」を見た瞬間、中身を読む前に電話番号だと分かる。その「っぽさ」を文字で書き下せる言語が正規表現だ、と。
あのときのあなたには、まだ道具がありませんでした。いまは違います。. と [ ]、くりかえしの * + ?、はじまりとおわりの ^ $、または の | とまとまりの ( )——道具箱はそろいました。
最終レッスンの仕事は、新しい記号を覚えることではありません。手持ちの道具だけで、暮らしの中の「書式」をひとつずつ言い当てていきます。
郵便番号を、組み立てる
日本の郵便番号は「305-8577」のような姿をしています。声に出して、かたちを言い当ててみてください。数字が3つ、棒、数字が4つ。
これをもように翻訳します。数字1文字は [0-9] でした。3つほしければ、3回書きます。棒は - をそのまま。つづけて [0-9] を4回。できあがりが [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] です。
まずは普通の検索で、文の中から拾わせてみましょう。
〒305-8577 つくば市。電話は 029-853-2111 です。
郵便番号は拾えました——が、もうひとつ塗られています。電話番号のおしり、「853-2111」です。そこも偶然「数字3つ、棒、数字4つ」のかたちをしていたからで、もようは郵便番号の「意図」ではなく「かたち」しか見ていません。
行ごとの門番にする
だから書式チェックには、レッスン4の道具を使うのでした。^ と $ で「行のぜんぶがこのかたちであること」を求め、行ごとに○×で判定します。
- ○
305-8577 - ×
3058577 - ×
305-857 - ○
100-0001
「3058577」は棒がないので×。「305-857」は、$ の手前で数字が1つ足りないので×。入力フォームが「郵便番号の形式で入力してください」と言ってくるとき、裏ではだいたい、この種の門番が立っています。
かたちは見抜ける。意味は見抜けない
もうひとつ、日付をやってみます。「3月14日」のかたちは、数字の並び、月、数字の並び、日。レッスン3の + を使えば ^[0-9]+月[0-9]+日$ と書けます。
- ○
3月14日 - ○
12月31日 - ○
13月99日 - ×
3月14
「3月14日」も「12月31日」も○。ところが、3行目を見てください。「13月99日」にも○がついています。カレンダーのどこにもない日です。
これは、もようという道具の正直な姿です。もようは「数字が並んで、月、数字が並んで、日」というかたちを完璧に見抜きますが、「13月は存在しない」という意味はひとことも語っていません。かたちの門番と、意味の門番は、別の係なのです。
⟡ よりみち:レッスン7の限界とは、別の話
前のレッスンで見た限界——かっこの対応のような「数えるしごと」は原理的にできない——は、どう書いても越えられない壁でした。今日の「13月」は壁ではなく、役割分担の話です。月を1〜12にしぼるもようは、がんばれば書けます(^(1[0-2]|[1-9])月 のように)。でも実務では、かたちはもようで、意味の検査は普通のプログラムで、と分担するのがきれいなやり方です。コース1で書いたような「もし〜なら」の出番ですね。
演習の前に——時刻のもよう
最後の実験台をひとつ用意しました。デジタル時計の「9:05」のかたち、数字の並び、コロン、数字2つです。
- ○
9:05 - ○
23:59 - ×
9:5 - ×
930
「9:5」と「930」が×になる理由は、もう自分のことばで説明できるはずです。そして「99:99」と打ち足せば○になることも、もう驚かないはずです——かたちと意味は、別の係でした。
✎ 最終演習:あなたの書式を、ひとつ
あなたの身の回りから「書式」をひとつ選んで、上の実験室でもようを書いてください。本文の欄には、当てはまってほしい例と、はじいてほしい例を数行ずつ並べます。
候補が思いつかなければ、このあたりから。
- 学籍番号や社員番号(例:B2310585)
- 飛行機の便名(例:NH006、JL123)
- 車のナンバーの地名のうしろ(例:300 あ 12-34)
ヒント1(手順)
いきなり記号を書かず、まず日本語で「かたち」を言い当ててください。「大文字が2つ、そのあと数字の並び」のように。翻訳はそれからです。
こたえの例(便名)
「大文字2つ+数字の並び」と読んだなら ^[A-Z][A-Z][0-9]+$。NH006 や JL123 に○、NH だけや 006 だけには×がつきます。ただし、これが唯一の正解ではありません。「数字はちょうど3つ」と読んで並べて書く手も、「2文字目は省略されることもある」と読んで ? を足す手もあります。もようは、あなたがその書式をどう読んだかの表明です。正解はひとつではありません。
歩いてきた道(コース3の総括)
- もよう——特定のことばではなく、ことばの「かたち」を言い当てる、世界でいちばん小さい部類の言語
- 道具——
.、[ ]と範囲、くりかえしの*+?、はじまりとおわりの^$、|と( )、そして記号を文字に戻す\ - 機械——もようの正体は状態機械。前から1文字ずつ、後戻りせずに読むので、暴走しない
- 限界——数えるしごとはできない。そして、かたちは見抜けても意味は見抜けない
- 実践——暮らしの書式は「日本語でかたちを言い当ててから、翻訳する」。正解はひとつではない
庭の、次の区画へ
このコースの道具は、明日から使えます。Ctrl+F の検索窓、エディタの置換、ファイルの一括リネーム——もようを受けつける窓は、あなたの思っているよりたくさんあります。
そして庭には、つづきの区画があります。もようの機械は本文を前から1文字ずつ読みましたが、電話帳のように「そろっている」ものからさがすなら、もっと速い手があります——その話がコース4「アルゴリズムのかたち」です。レッスン7で出会った「もようには越えられない壁」の正体を、紙の機械で確かめに行くのがコース5「計算できる、とはどういうことか」です。
8つのレッスンで、あなたは「っぽさ」を感じるだけの人から、それを文字で書き下せる人になりました。
修了、おめでとうございます! あなたはもう、検索窓の裏に住む小さな言語の、れっきとした話者です。