我有以下代码段:
$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
然而,当我在在线测试工具{@ 3}}中运行相同的示例时。
这里有什么问题?
答案 0 :(得分:3)
只需添加一个转义符:
preg_match('/[\/\\\](\d+_\d+_\d+_\d+)[\/\\\]/', $file, $matches);
// here __^ and __^
答案 1 :(得分:1)
您需要在模式中再添加一个反斜杠。
preg_match('/[\/\\\](\d+_\d+_\d+_\d+)[\/\\\]/', $file, $matches);
因为反斜杠本身就是一个特殊字符,所以你需要用另一个反斜杠(\)来转义它 你想把它直接包含在表达式中。更重要的是,因为反斜杠接着是另一个 字符串中的字符本身在PHP中被视为转义字符,通常需要添加第三个字符 反斜杠(\\)。呼!
答案 2 :(得分:0)
我会试试这个:
preg_match('/^\/.*(\d+_\d+_\d+_\d+)\/.*$/', $file, $matches);