「正規表現」はさまざまなプログラミング言語やアプリケーションから利用できますが、正規表現で使われている「記号」がどのように選ばれたのか不思議に思っている方もいるかもしれません。
今回、正規表現の"$"と"^"が行末・行頭を示すラインアンカーとして選ばれた理由を推測するブログ記事、「Why do regexes use `$` and `^` as line anchors?」が公開され注目を集めています(Reddit)。
記事を作成したコンサルタントのHillel Wayne氏によると、正規表現が最初に登場したのはKen Thompson氏が移植したQEDテキストエディタだとのことです。移植版のQEDエディタのマニュアルには以下のような情報が掲載されています。
b) "^" is a regular expression which matches character at the beginning of a line.
c) "$" is a regular expression which matches character before the character
(usually at the end of a line) b) "^"は、行頭の文字にマッチする正規表現である。
c) "$" は、文字
の前 (通常は行末) の文字にマッチする正規表現である。
QEDはedの前身となるテキストエディタで、edは正規表現の普及に貢献することになります。Ken Thompson氏が正規表現でこれらの文字を採用した理由について、次のように推測されています。
まず、行末の"$"に関しては、オリジナルのQEDエディタに正規表現はなかったものの、$が「バッファの終わり」を示す記号として使われていて、Ken氏が行末を意味する記号として採用したというものです。
バッファの終わりとして$が採用された理由としては当時のハードウェア環境があげられています。QEDはSDS-930メインフレーム用に書かれたもので、SDS-930は入力装置としてテレタイプ35型を使っていました。このキーボード(上記画像)には使える記号が少なく、ビジネスで非常に重要で、タイプライターでも必ず利用できた$が採用されたのは自然なことだと考えられるのです。
一方、行頭の"^"はオリジナル版には存在せず、Ken氏のキーボードで^が利用できたことがその理由だと推測されています。その時期はキーボードがASCII対応を始めたころで、^はASCII-67に発音記号として含まれているからです。
ブログ記事の情報は推測に基づくものですが、何か深淵な理由があったわけではなく、「使える記号だから使った」という単純な理由だったのかもしれません。