0

Apache ログにいくつかのエラーが表示された後、「理由」を突き止めようとしました。バックスラッシュ文字で始まる文字列を検索しようとした preg_match コマンドに関連するエラー:

preg_match('/^\\/',$str)

「preg_match():終了区切り文字「/」が見つかりません」と報告していました

好奇心から、一重引用符の代わりに二重引用符と、1 ~ 6 個のバックスラッシュの組み合わせを試しましたが、常に同じエラーが報告されます。(とりあえずテストを if(substr($str,0,1) == "\") {} に切り替えました)

4

4 に答える 4

6

これは、文字列リテラルの内部が PHP によって\\単一に変換されるためです。\

したがって、正規表現は/^\/であり\、末尾のスラッシュを末尾の区切り記号としてではなく、文字どおりスラッシュとして変換します。これにより、末尾の区切り文字がない正規表現が残るため、PCRE は不平を言います。

必要な結果は/^\\/であり、それを文字列リテラル内に配置するには、バックスラッシュを 2 つにする必要があるため、次のようになります。

preg_match('/^\\\\/',$str)

とはいえ、if($str[0] === '\\')はるかに読みやすく、実行も高速です。

于 2013-06-11T19:24:59.407 に答える
1

\\単一としてエスケープされるため、次の\ことを行う必要があります。

preg_match('/^\\\\/',$str)
于 2013-06-11T19:25:22.173 に答える
-2

'これは(一重引用符)と関係があると思います

それらを二重引用符に変更してみてください"。2つ\あれば十分です。

于 2013-06-11T19:24:50.333 に答える