$ は、最後の文字である改行の直前の位置と一致しません。
理想的には /1...$/ が一致するはずですが、パターン /1....$/ で一致が発生しますが、これは間違っているようです。
その理由は何ですか?
PHP docには、ドル文字 ($) は、現在の一致点が対象文字列の末尾にある場合、または文字列の最後の文字である改行文字の直前にある場合 (デフォルト) にのみ TRUE になるアサーションであるとも書かれています。
$subject = 'abc#
123#
';
$pattern = '/1...$/';
preg_match_all($pattern,$subject,$matches); // no match
更新: 改行の \r\n 形式が原因で、余分なドットが疑われます。私は次の実験を行い、いくつかのヒントを見ました。
$pattern = '/1...(.)$/';
echo bin2hex($matches[1]); // 28
28 は \r (CR) と等しいように見えるので、基本的に $ は \r\n の前ではなく \n の前に一致します。これが私の問題の原因かもしれません。
印刷不可文字をオンにした後の画像