3

我有这个正则表达式:

'/^files\/(.+\..+)$/';

但我想用运行时变量替换“files/”部分。

我试过这个:

$filePath = "files/";
'/^'.$filePath.'(.+\..+)$/';

这不起作用,还有这个:

$filePath = preg_quote("files/");
'/^'.$filePath.'(.+\..+)$/';

但我仍然在 preg_match 行的这个循环中得到一个错误,说“(”是一个未知的修饰符。

foreach (glob(FILE_PATH."*.*") as $filename) {
    preg_match($pattern, $filename, $matches);
    echo "<option class='file' value='".$matches[1]."'>".$matches[1]."</option>";
}

任何帮助将不胜感激,谢谢。

编辑

这有效...

$filePath = 'files\/';

...但在实际使用中,我正在尝试使用在另一个文件中声明的常量。

所以:

define('FILE_PATH', 'files/');

...然后尝试使用该常量。它不能嵌入转义字符,因为应用程序的某些其他部分在没有转义字符的情况下需要它。

4

1 回答 1

3

您需要传递preg_quote分隔符:

$filePath = preg_quote("files/", '/');

由于您可以使用很多字符作为分隔符,preg_quote因此无法知道您将要使用/,因此默认情况下它不会转义它。这就是第二个(可选)参数的用途。

否则,您的第二种方法(使用preg_quote的方法)是可行的方法。

于 2012-11-25T14:46:32.837 回答