带反斜杠的preg_match()无法按预期工作/抛出错误

时间:2015-05-15 07:43:21

标签: php regex string preg-match

我需要preg_match() PHP中的模式,无论我做什么,都会出错。

我在网上看了一遍,找不到任何告诉我实际上做错的事情。

这是我的preg_match模式:

preg_match('/\MyApp\Library\Task\/', '\MyApp\Library\Task\Db\Generate');

它总是返回一个数组,我该怎么办?如何让我的正则表达式正常工作?

1 个答案:

答案 0 :(得分:9)

我知道这听起来很疯狂,但你需要使用4个反斜杠为你的正则表达式获得1个反斜杠。所以你的代码看起来像这样:

preg_match('/\\\\MyApp\\\\Library\\\\Task\\\\/', '\MyApp\Library\Task\Db\Generate');

为什么需要使用4?因为在PHP中,您使用反斜杠来转义后续字符,因此您将其转义为获得一个文字反斜杠(\\)。

但是因为我们处于正则表达式中,所以如果你想在你的正则表达式中使用反斜杠,你需要使用反斜杠,这意味着你必须使用\\两个反斜杠,这些反斜杠与PHP结合在一起以逃避另一个两个反斜杠总是以一个字符结尾,然后在你的正则表达式中以一个反斜杠结束。