У меня есть строка, которая выглядит так:
../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 все нормально. (Мне потребовалось пару минут, чтобы понять, что мне не нужен /g
в preg_replace)
Если я использую этот шаблон в preg_replace, я должен сделать (\\\\[\.]{1,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