preg_matchにおける$の挙動を知る。
<?php $str = "01237"; $str = preg_replace("/37$/", '', $str); var_dump($str); //string(3) "012"
当然だ。次に以下を実行する。
$str = "01237\n"; $str = preg_replace("/37$/", '', $str); var_dump($str); //string(4) "012\n"
ん?文字列の最後尾の改行コードが$で捉えきれなかった。
$str = "01237\n"; $str = preg_replace("/37$/D", '', $str); var_dump($str); //string(6) "01237\n"
上述のようにDオプションを加えると期待した動作になる。
■まとめ
- $
- 行の末尾
- D
- $を検索対象文字列の終わりにのみマッチ。これが無い場合、$は改行文字の前でもマッチする
従って前述のコードの様な結果となる。