2

問題の正規表現:

$reg = '/[.]{1,}[\/\\]/';
if(preg_match($reg, $dir))...

http://regexpal.comhttp://regex.larsolavtorvik.com/でこの式をテストしましたが、問題なく動作しましたが、私の PHP スクリプトではこの通知が表示されます。

Message: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 12

「\」の数をいじりましたが、何も変わっていません。何がうまくいかないのかについての提案はありますか?

同様の問題を探してみましたが、区切り記号を追加していない人だけに遭遇したようです。

4

1 に答える 1

4

これ\\は、PHPによって単一にエスケープされるためです。これにより、パターンが次のように評価されます\preg_match

/[.]{1,}[\/\]/

PHP文字列に2つの円記号を含めるには、実際に4と入力する必要があります。

$reg = '/[.]{1,}[\/\\\\]/';
preg_match($reg, "test");

または、PHPのヒアドキュメントを使用します。

$reg = <<<REGEX
/[.]{1,}[\/\\\\]/
REGEX;
preg_match($reg, "test");

編集:ヒアドキュメントにも4つの円記号が必要なようです。これは、のような制御文字が原因です\n

于 2012-08-08T19:22:30.623 に答える