[PHP] preg_match の文字列の間にスラッシュが入っている場合の対処方法

1 min read

ファイルパスの文字列をpreg_matchした時の話。

状況

$dirNamepreg_matchってみるとWarningが発生。
if ( preg_match("/{$dirName}\.bak(.*)$/", $dn, $suf) ) {
  // foo, bar
}

対処方法

理由

文字列内の/は、\/とエスケープする必要がある。 (事前にエスケープできる場合はしておく方がよいと思う)

関数を使う

preg_quoteのデリミタに/を指定しておく。
$dirName = preg_quote($dirName, "/");

これでエスケープされるのでpreg_matchが通るようになる。