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


Regular Expression working in online test tool, but not in my app

我有以下代码片段:

$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);
相关文章: