我有以下代码片段:
$file = '/mnt/stoneshare/cache/video/10_12_101_38/000/011/M00001.mp4';
preg_match('/[/\](d+_d+_d+_d+)[/\]/', $file, $matches);
var_dump($matches);
显然,这会产生:
preg_match(): Compilation failed: missing terminating ] for character class at offset 27
然而,当我在在线测试工具中运行相同的示例时,它可以工作。
这里有什么问题?
只需添加一个转义:
preg_match('/[/\](d+_d+_d+_d+)[/\]/', $file, $matches);
// here __^ and __^
您需要在模式中添加一个反斜杠。
preg_match('/[/\](d+_d+_d+_d+)[/\]/', $file, $matches);
因为反斜杠本身是一个特殊字符,所以你需要用另一个反斜杠 ( \ ) 转义它,如果您希望将其字面意思包含在表达式中。更重要的是,因为一个反斜杠后跟另一个反斜杠字符串中的字符本身在 PHP 中被视为转义字符,通常需要添加第三个反斜杠 ( \\ )。唷!
我会试试这个:
preg_match('/^/.*(d+_d+_d+_d+)/.*$/', $file, $matches);