ハット記号 (^
) は、文字クラス外でマッチモード (matching mode) がデフォルトの場合、
カレントのマッチング位置が対象文字列の始端である場合に真だ
という言明です。文字クラス内では、ハット記号 (^
) はまったく別の意味と
なります(別記参照)。
パターン中で選択肢を用いる場合は、ハット記号 (^
) は、それが必要な選択肢の
先頭に記述すればよく、パターン全体の先頭にしか記述できない訳では
ありません。すべての選択肢がハット記号 (^
) で始まる場合、つまり
パターンが対象文字列の始端でのみマッチするように制限されている
パターンは、固定 (anchored) パターンと呼ばれます(もちろん、
他にもパターンを固定にする方法はあります)。
ドル記号 ($
) は、(デフォルトでは)カレントのマッチング位置が
対象文字列の終端にあるか、文字列の終わりの改行文字の直前にある場合に
真だという言明です。パターン中で選択肢を用いる場合は、ドル記号 ($
) は、
必要な選択肢の最後に記述すればよく、パターン全体の最後にしか
記述できない訳ではありません。
ドル記号は、文字クラス内では特別な意味を持ちません。
コンパイル時またはマッチング時に PCRE_DOLLAR_ENDONLY オプションを設定すると、ドル記号の動作を文字列の終端でのみ マッチするように変更することができます このオプションは \Z 言明には影響しません。
ハット記号とドル記号の動作は、PCRE_MULTILINE オプションを設定すると変化します。この場合、対象文字列の始端および 終端にマッチするのに加えて、対象文字列の "\n" 文字の直前および直後に それぞれマッチします。例えば、パターン /^abc$/ は、複数行モードに おいては、対象文字列 "def\nabc" にマッチしますが、 複数行モードでない場合はマッチしません。すなわち、すべての選択肢が "^" で始まっており単一行モードでは固定のパターンも、複数行モードでは 固定パターンでなくなります。PCRE_DOLLAR_ENDONLY オプションは、 PCRE_MULTILINE オプションが設定されている場合は無視されます。
どちらのモードでも、エスケープシーケンス \A, \Z, \z は、 対象文字列の始端および終端にマッチすることに注意してください。ですので、 パターン中の選択肢がすべて \A で始まる場合、PCRE_MULTILINE オプションの設定によらず、そのパターンは固定となります。