正则表达式在线测试工具,但不在我的应用程序中

时间:2014-04-04 08:56:40

标签: php regex pcre

我有以下代码段:

$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}}中运行相同的示例时。

这里有什么问题?

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);