如果错误,PHP preg_replace模式似乎只能工作?

时间:2015-01-21 11:56:27

标签: php regex

我有一个看起来像这样的字符串

../Clean_Smarty_Projekt/tpl/templates_c\.
../Clean_Smarty_Projekt/tpl/templates_c\..

我想用正则表达式替换../\.\..

之前,我是这样做的:

$result = str_replace(array("../","\..","\."),"",$str);

并且它(模式)必须按此顺序排列,因为更改它会使输出变得有点儿麻烦。所以我决定使用正则表达式。

现在我想出了这种模式

$result = preg_replace('/(\.\.\/)|(\\[\.]{1,2})/',"",$str);

实际上只返回空字符串......

原因:(\\[\.]{1,2})

Regex101中一切正常。 (花了几分钟才意识到我在preg_replace中不需要/g

如果我在preg_replace中使用此模式,我必须执行(\\\\[\.]{1,2})才能使其工作。但这显然是错误的,因为我不是在搜索两个斜杠。

当然我知道逃跑的冲动(逃避斜线)。

为什么这不匹配?

1 个答案:

答案 0 :(得分:2)

我建议你使用不同的php分隔符。在/分隔符内,您需要使用三个\\\或四个\\\\反斜杠来匹配单个反斜杠。

$string = '../Clean_Smarty_Projekt/tpl/templates_c\.'."\n".'../Clean_Smarty_Projekt/tpl/templates_c\..';
echo preg_replace('~\.\./|\\\.{1,2}~', '', $string)

输出:

Clean_Smarty_Projekt/tpl/templates_c
Clean_Smarty_Projekt/tpl/templates_c