У меня есть строка, которая выглядит так:
../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