なぜ正規表現の行頭と行末を表す記号として「^」と「$」が採用されたのか?
なぜ正規表現では「^」と「$」という記号を行の先頭・末尾を示す記号として採用したのかという歴史について、ソフトウェアエンジニアのヒレル・ウェイン氏がブログに投稿しました。
Why do regexes use `$` and `^` as line anchors? • Buttondown
https://buttondown.email/hillelwayne/archive/why-do-regexes-use-and-as-line-anchors/
正規表現は「文字列の集合を一つの文字列で表現する方法の一つ」で、例えば「/^G.*/」という一つの文字列を使用して「Gから始まる文字列全て」のようにたくさんの文字列の集合を表現できます。そうした正規表現で使用される文字のうち、「^」は行頭に一致し、「$」は行末に一致する文字となっています。
これら2つの文字はQEDテキストエディタのケン・トンプソン氏の移植版で初めて登場しました。オリジナルのQEDエディタには正規表現がなく、「^」は使用されていませんでした。一方「$」はオリジナル版ではバッファ内の最後の行を指すとされていました。トンプソン氏は「$」の意味を調整して正規表現に持ってきたというわけです。
ここでウェイン氏はQEDエディタはなぜ「$」をバッファの終わりとして採用したのかを調べてみたとのこと。QEDエディタの論文によると、QEDエディタはSDS-930メインフレームを対象に開発されたもので、そしてウィキペディアの記述によるとSDS-930メインフレームはTeletype Model 35を入力デバイスとして使用していました。
ウェイン氏は販売パンフレットからTeletype Model 35の写真を入手。この写真をじっくり観察すると、「[]{}\|^_@~」などの記号がありません。残りの搭載されている記号の中で、「$」は最も役に立たなさそうです。
「$」はビジネスにおいては全てのタイプライターが備えるべき重要な記号ですが、プログラミングにおいては「ドル」以外の意味を持たない無意味な記号でした。ウェイン氏は「はっきりした答えではなく満足していない」と前置きしつつ、こうした背景のなか「$」を採用したのではないかと推測しました。
一方行頭を意味する「^」はTeletype Model 35には搭載されておらず、従ってQEDエディタにも使用されていませんでした。しかしトンプソン氏のキーボードには「^」が存在していたため、トンプソン氏は「^」を行頭を意味する記号として採用したのではないかとウェイン氏は推測しています。
◆フォーラム開設中
本記事に関連するフォーラムをGIGAZINE公式Discordサーバーに設置しました。誰でも自由に書き込めるので、どしどしコメントしてください!Discordアカウントを持っていない場合は、アカウント作成手順解説記事を参考にアカウントを作成してみてください!
• Discord | "正規表現、どんな時に使ってる?" | GIGAZINE(ギガジン)
https://discord.com/channels/1037961069903216680/1224647243441635349
・関連記事
正規表現を使ってモンスターを討伐していくゲーム「Regex Hunting」をプレイしてみた - GIGAZINE
アプリからファイアウォールにまで使われる正規表現を標的にした「ReDoS攻撃」とは? - GIGAZINE
普通のパズルではない「正規表現クロスワード」がBBCラジオに登場 - GIGAZINE
スラッシュの有無だけでセキュリティにとんでもない大穴が空いてしまうNginxのありがちな設定ミスについて実例を踏まえて専門家が解説 - GIGAZINE
Linuxの基礎用語を完全理解するためにエンジニアが作成した「10のミニプロジェクト」とは? - GIGAZINE
・関連コンテンツ