2011年9月30日金曜日

preg_match()の$は末尾に改行があってもマッチする


$は最後に改行があってもマッチする。(ただし、マッチした結果には改行は含まれない。)

preg_match('/^aaa$/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';

"aaa"


$の代わりに"\z"(バックスラッシュ+小文字のz)にすれば、改行があるとマッチしない。
preg_match('/^aaa\z/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';

""


Zが大文字だと$と同様に改行があってもマッチするので注意。
preg_match('/^aaa\Z/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';

"aaa"


$は改行の後ろに何かあればマッチしない。
preg_match('/^aaa$/', "aaa\n ", $match);
echo '<pre>"', $match[0], '"</pre>';

""


例えそれが改行でも。
preg_match('/^aaa$/', "aaa\n\n", $match);
echo '<pre>"', $match[0], '"</pre>';

""


マッチした結果に改行まで含ませるとこうなる。
preg_match('/^aaa\n\z/', "aaa\n", $match);
echo '<pre>"', $match[0], '"</pre>';

"aaa
"


参考

0 件のコメント:

ブログ アーカイブ

tags