【連載】タコにもわかる正規表現①

ATS さんのブログ記事

突然ですが、みなさんタコの足の本数はご存じですよね。そう8本です。
でも、シー・ライフという水族館の研究結果によると正しくは6本が腕で、残りの2本が脚らしいです。

また、多足タコと呼ばれるタコもいるようで、日本でも96本足のタコが捕獲されていて、そんなことを調べていると足のことだけでブログが一本書けそうですが、それはさておき一般的には8本です。

では、心臓や脳の数はご存じでしょうか?
正解は心臓が3つで、脳にいたっては9つもあるそうです。そして、タコの知能は3歳児並と言われています。

タコにもわかる正規表現

『正規表現』なんだか難しそうな言葉です。
英語で書くと『Regular Expression』余計に意味がわかりません。

今回はそんな正規表現ってやつを、3歳児並のタコでもわかるように説明してみたいと思います。
と、かなり強引なイントロでしたが、僕自身が「サルにもわかる正規表現入門」というサイトで取っかかりを学んだので、もっともっと初歩的なことから説明しようと思い、「タコにもわかる正規表現」というタイトルにしてみました。

正規表現ってなに?

正確な答えではありませんが、「検索・置換のすごいやつ」って思っておけば良いです。
実際に僕が最初に正規表現を使った事例を紹介してみます。

当時印刷会社に勤めていた僕は、携帯電話の取扱説明書を作っていました。
今となっては「ガラケー」や「パカパカ携帯」と呼ばれていますが、「mova」「FOMA」「CDMA 1X」なんて書くと懐かしいあのころが思い浮かぶ方もいらっしゃるのではないでしょうか。

それらに同梱されていた分厚い説明書の文章を作ったり、データを入力したりする仕事をしていました。
文章を作るのがメインの作業ではあるのですが、それ以上に頭を悩ませたのが「参照ページ」というやつです。

具体的には「詳しくは234ページをご覧ください。」などといった書き方で別ページに飛ばす記載なのですが、これのチェックがなかなかやっかいで、まずはどこに参照ページがあるかを、何百ページもある説明書からもれなく探し出す必要があります。

目で探していたら見落とす可能性もありますし、「ページ」で検索すると「ホームページ」「Webページ」などといった関係ない記載にもヒットしてしまいます。
また、完成間近になって途中のページが増減すると、それよりあとのページを参照している記載だけを変更するなんて作業が発生します。

例:「53ページ」のあとに2ページ増えたら、「54」以上の参照ページはすべてプラス2しなければならない

このような特定条件にあてはまる記載だけを見つけたいときに、正規表現が使えると過不足なく検索できるようになります。

正規表現っていつ使うの?

何百ページもある説明書を作るときに便利なのはわかったけど、そんな仕事はしてないから関係ないよと思っている人もいるでしょう。

しかし、仕事をしていて商品情報や顧客情報など、たくさんのデータを扱うことはありませんか?
そういった情報はデータベースに登録されていたりして、でもデータベースを自分で直接さわることはできないから誰かに頼んでExcelやCSVに書き出してもらって、そこからごにょごにょ調べたり整形するなんて経験はきっとあるはずです。

そういうときに正規表現が使えると、お目当てのものを一発で見つけたり、一括で変更したりできます。
なので、いつ使うというよりも、使いたいときにいつでも簡単に使える小技といった感じです。

プログラムやSQLコマンドを自分で書ける人は大技の使い手、でもそれがメインの仕事じゃない人にとっては正規表現という小伎を覚えておくだけで、普段の仕事の精度やスピードがアップするということです。

一文字単位のOR検索 [ ]

では、そろそろ本題に入ります。

まずは冒頭のタコの文章を見てください。「8本」などの足の本数記載がどこにあるかを探してみましょう。
Wordにも正規表現に近い機能がありますので、お持ちの方はWordに貼り付けて実際に検索してみてください。

【本】で検索すると「本数」「日本」「一本」といった関係ない記載にもヒットしてしまいます。
【8本】【6本】【2本】で検索すると、過不足はなくなりますが3回も検索する必要があります。

これを一発で検索するには「検索」の近くにある下向き三角マークをクリックして、「高度な検索」ダイアログを表示します。
そして「ワイルドカードを使用する」にチェックを入れ、【[862]本】で検索すると過不足なく5箇所にヒットします。(画像あり)

短い文章なのでどのやり方でも手間は変わらないようにも見えますが、もっと長文だったり、「3本」「7本」なども混ざっていたりした場合には、見落としのリスクや手間が増加します。

説明はとても簡単で、[ ]で囲まれた文字は、一文字単位でOR(または)検索になります。

【[862]本】=【8本】または【6本】または【2本】

「3本」「7本」も含めたければ【[86237]本】にすれば良いだけです。
もしも「6本が腕」「2本が脚」にヒットさせたければ、【[62]本が[腕脚]】で検索します。

【[62]本が[腕脚]】=【6本が腕】または【6本が脚】または【2本が腕】または【2本が脚】

[ ]の中を範囲で表す [-]

ここまで来れば、事例で挙げていた「参照ページ」の見つけ方も簡単です。

答えは【[0123456789]ページ】です。
でもちょっと書くのが面倒です。こういうときには【[0-9]ページ】という書き方で省略することが可能です。

【[0-9]ページ】=【0ページ】~【9ページ】

このハイフンは[ ]の中にある場合の使い方なので[-]というように、セットで覚えておいてください。
ただし、これは文字コード表で0~9までが順に並んでいるから使える書き方でして、ひらがな全部を検索したくても【[あ-ん]】では網羅できないので注意してください。

[ ]の中を否定する [^]

「否定する」という言い方がわかりにくければ「じゃない方」とでもしておきましょうか。

冒頭のタコの文章で【[862]本】じゃない方、つまり「本数」「日本」「一本」にヒットさせたければ【[^862]本】で検索します。(実際は「本数」ではなく「の本」にヒットします)

Wordの場合は[^]ではなく[!]を使うので、【[!862]本】という書き方になります。
どちらにしても[ ]の中にある場合の使い方なので、[^]や[!]というように、これもセットで覚えておいてください。

また、ハイフンと組み合わせることも可能です。
【[^0-7]本】や【[!0-7]本】で検索すると、「0~7じゃない一文字のあとに本」と書かれている箇所がヒットするので、「の本」「日本」「一本」「8本」にヒットします。

今回はここまでですが、いかがだったでしょうか。

正規表現について書いているサイトはいっぱいあるのですが、表現が難しかったり、説明がシンプルだったりと、ゼロから覚えるには少しハードルが高く感じられたので、読み物的に書いてみました。

次回は、もう一つの事例として挙げていた「54」以上の参照ページを見つける方法を書きますが、もう頭がいっぱいだよという方はここまでにして、またいつか小技を繰り出したくなったときに続きを読んでいただければと思います。

最後におさらいクイズを出しておきます。
「大技」「小技」という言葉がなんどか出てきましたが、「技」じゃない漢字を使っている箇所があります。
正規表現を使って、「大技」「小技」の「技」の漢字が違う箇所を一発で見つけてみてください。

この記事はさんが執筆しました

【連載】タコにもわかる正規表現①

関連記事