私はから正規表現を勉強して、正規表現をマスター第3版、と私は、文全体で来て$
いる少し複雑よりも^
私は、彼らが「左右対称」と思っていたとして私を驚かせた、彼らは彼らのことを意味するためにエスケープされている場合を除き、リテラル対応。
実際には、129ページで、その説明は賛成で過ごした多くの言葉で、若干異なっています$
。しかし、私はまだそれについて混乱しています。
^
2つだけ明確な選択肢が説明されています。
キャレット
^
enhacedラインアンカーモードの場合は、テキストビーイングの先頭にマッチは任意の改行の後に、検索、および。[...]$
[...]マッチ
$
説明は私にはもっとあいまいです。
$
[...]対象文字列の末尾にマッチし、前の文字列終わるだけでなく、改行、。後者のような表現を可能にする一般的であるs$
(、表向きは「で終わる行と一致するようにs
一致させる」)…s<NL>
、で終わる線s
終わる改行でキャップされています。以下のための二つの他の一般的な意味は、
$
対象のテキストの末尾にのみ一致し、かつ任意の改行の前に一致しています。
後者の二つの意味を説明したものにかなり左右対称に見える^
が、何についての文字列終了改行の意味?
検索[regex] "string-ending newline"
のみ与えられる1、2、および3現時点では、その結果を、そしてそれらのすべては、を参照してください。
$
文字列または単なる文字列終わる改行の前の位置の終了位置にマッチします。ラインベースのツールでは、任意の行の終了位置と一致します。
ゼロ幅アサーションは、$
文字列の末尾位置をアサートし、または文字列(もしあれば)の端部でラインターミネータ直前。
それは、これらのコードスニペットとより明確になりますperl
。
$str = 'abc
foo';
$str =~ s/\w+$/#/;
print "1. <" . $str . ">\n\n";
$str = 'abc
foo
';
$str =~ s/\w+$/#/;
print "2. <" . $str . ">\n\n";
$str = 'abc
foo
';
$str =~ s/\w+$/#/;
print "3. <" . $str . ">\n\n";
これは、この出力を生成します。
1. <abc
#>
2. <abc
#
>
3. <abc
foo
>
あなたがそれ見ることができるように$
マッチの例を1
して2
いるため$
、文字列(の末尾にマッチケース1)または末尾の改行の直前(ケース2)。しかし、ケース3は、改行が文字列の末尾ではないので、比類のないまま。