質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

3692閲覧

正規表現で使う行頭行末の記号の由来

yuu341

総合スコア161

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

10グッド

11クリップ

投稿2016/01/06 05:51

10

11

お世話になります。

よく正規表現で出てくる特殊な文字行頭(^)と行末($)ですが、よくどっちがどっちを意味していたのか忘れてしまいます。
というのも記号自体が何かを連想する形になっていないためです。
例えばエスケープシーケンスならば
「\n」← あぁnewlineだからかな?とか
「\t」なら タブ文字だからかな?
といった具合に、なぜその文字がそうなのかが略称で想像できます。

行頭(^)行末($)の記号には何か意味があるのでしょうか?

dsk, ozwk, hrsg, rifuch, rossi46hiro, NS-DOS, afroscript, ikuwow, argius👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

^ は、鏃(矢じり:矢の先端につける尖った金属や石器)なので、先頭と覚えました。

^
|
|
|
$

で、矢の形に見えませんか?

投稿2016/01/06 08:53

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuu341

2016/01/06 11:17

ご回答ありがとうございます。 矢じりの先端のイメージ大変わかりやすいと思います。
guest

0

ベストアンサー

^は今でこそ発音記号ですが古いASCIIでは↑だったので、この連想は残っているかもしれません。つまりcoco_bauerさんのおっしゃる鏃という覚え方はこじつけでなく古くは正しい意味づけだったと。

$なのですが、情報科学系の本を読んでいると文字列末尾の記号として出てきますので良くある使い方なのかも(「高速文字列解析の世界」、いいですよ。睡眠剤的な意味でも⋯)。とは言え、正規表現で$が行末を意味している方が先でそちらが影響を与えているのかもわかりません。

話は変わるのですが、^, $ を使う機会、そんなにあるでしょうか?
もしかしてですが、\A(文字列頭)、\Z(文字列末)を使うべき状況で^, $のどちらがどちらかに迷ってはおられるのではないかと。

投稿2016/01/06 09:03

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuu341

2016/01/06 11:15

ご回答ありがとうございます。 実はvimについて学んでいたところ、行末が表示させるオプションが出てきた時に、そういえば正規表現でも行頭と行末に変な記号を使ってるな?と思ったのがきっかけで 由来という切り口から、歴史的経緯などを含めた面白い話が聞けるのではと思い投稿しました。 \A-\Zは知りませんでしたが、アルファベットの最初と最後なので大変理解しやすい表記だと思います。 使える場合ならば積極的に使いたいと思います。
otn

2016/01/06 15:56

\A \Z \z はPerl拡張での機能ですから、 それ以降の多くの言語では使えますが、sed や awk や expr などでは使えませんね。grep は -P を付ければOK。 使えるケースでは、\Z と \z の違いも認識してください。 多くの場合では、\A~\z になるかと思います。 > 情報科学系の本を読んでいると文字列末尾の記号として出てきますので 1970年代の8bitCPU用のOSであるCP/M(初期のMS-DOSが参考にしたOS)では「文字列出力API」の引数の文字列は$が終端でしたね($自体は出力されない)。今考えると、何故NUL文字じゃないのか謎ですが、さらに何か元ネタがあったんでしょう。
guest

0

私も\A\Zが使えるならそちらを使う方が分かりやすいかと思います。

正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう | 徳丸浩の日記
http://blog.tokumaru.org/2014/03/z.html

あと、あまり参考にはならないと思いますが、
Vimというエディター(古くはVi)では、カーソル移動コマンドに、行頭へ移動は^、行末へ移動は$というのがあります。
これは正規表現が先なのか、コマンドが先なのか、寡聞にして存じませんが、それで相互的に記憶が強化されている気がします。



基本的なメタ文字については、他のも含めて丸暗記してしまう方が早い気もしますけどね。

正規表現の入門(1) 基礎的なメタ文字 (1/4):CodeZine(コードジン)
http://codezine.jp/article/detail/3246

投稿2016/01/06 09:15

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuu341

2016/01/06 11:22

ご回答ありがとうございます。 まさにvimを扱っていた時に疑問に思ったので質問した次第です。 おそらく使い続ければ慣れて覚えるものかなとは思うのですが 普段使わない特殊な文字をあえて使うということは、そこに何らかの歴史的な理由があったのではないかという好奇心から質問させていただきました。 メタ文字の参考サイトも見させていただきます。
guest

0

^ は別名ハット(hat)なので、
ハット→帽子→"頭"にかぶる→行"頭"
という覚え方はどうでしょうか。

※由来 とはちょっと違いますね。

投稿2016/01/06 10:09

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuu341

2016/01/06 11:27

ご回答ありがとうございます。 歴史的な経緯が知りたいという好奇心半分、空覚えできるように半分で質問しました。 帽子を連想するのが覚え方としては一番すんなりと覚えられそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問