PHP preg_replace шаблон работает только, если его неправильно?

У меня есть строка, которая выглядит так:

../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