preg_matchにおける$の注意点

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
$を検索対象文字列の終わりにのみマッチ。これが無い場合、$は改行文字の前でもマッチする

従って前述のコードの様な結果となる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です