ラボ > PHP:文字関連、セキュリティ関連

php 正規表現の「^ $」と「\A \z」の違い

文字列の各行をチェック or 全体でチェック

作成日:2025-07-11, 更新日:2025-07-11

基本

  • 「^ $」は文字列が複数行の場合、各行をそれぞれチェック
  • 「\A \z」は文字列が複数行の場合、1行としてチェック
$str = '';
$str .= 'hoge.test';
$str .= "\n";
$str .= 'foo.test';
「^ $」
preg_match('/^[a-zA-Z0-9.-]+$/', $str)
$strの各行に対してチェック 各行をチェック → それぞれパターンにマッチするので「true」
「\A \z」
preg_match('/\A[a-zA-Z0-9_]+\z/', $str)
$strを1行としてチェック 1行としてチェック →「\n」がパターンにマッチしないため「false」

メモ

preg_match('/^[a-zA-Z0-9.-]+$/', $str)
$str = 'hoge.test' . "\n" . 'foo.test';
各行パターンにマッチするのでtrue
$str = 'hoge.te+st' . "\n" . 'foo.test';
一つ目がパターンにマッチしないのでfalse
$str = 'hoge.test' . "\n" . 'foo.te+st';
2つ目がパターンにマッチしないのでfalse
$str = 'hoge.te+st' . "\n" . 'foo.te+st';
すべての行でパターンにマッチしないのでfalse