書きかけだった正規表現のページを書き始めた
はっきり言って、正規表現は苦手。正規表現は、日常的に使うけれど、他人に正確に説明するほどの自身はない。
特に覚えられないのが、ここ。
- ^ …… 行頭。文字列の先頭や改行文字の直後の位置にマッチします。
- $ …… 行末。文字列の末尾や改行文字の直前の位置にマッチします。改行自身は含みません。
- \A …… 文字列先頭。^ とは異なり改行の有無には影響しません。
- \Z …… 文字列末尾。文字列が改行で終っていればその改行の直前にマッチします。
- \z …… 文字列末尾。$ や \Z とは異なり改行の有無には影響しません。
整理しよう。
まず、「^」と「$」。この2つは行頭と行末にマッチする。そして、文字列の先頭と文字列の末尾にもマッチする。うん、これはOK。
次に、「\A」と「\z」。これらは改行があろうがなかろうが関係ない。改行は無視して、単純に文字列の先頭と末尾にマッチする。これもOK。
最後に「\Z」。これはなんだろう。「文字列が改行で終っていればその改行の直前にマッチします。」って。改行で終わっている文字列とは、次のような文字列だよな。
"hello\n"
で、その改行の直前にマッチすると。試してみよう。
"hello\n" =~ /.\Z/ p $& #=> "o" "hello\n" =~ /.\z/ p $& #=> nil "hello\n" =~ /.\z/m p $& #=> "\n"
ふうむ。わかったようなわからないような。