Intereting Posts
PHP: как проверить, является ли URL-адрес Youtube или vimeo's Использование PHP для поиска Юникода персонажа Как установить собственный размер страницы в mPDF? Как определить, находится ли пользователь на локальном хосте в PHP? Не удалось загрузить ресурс: прервана загрузка кадра – Agian Чтение в Malformed XML (некодированные объекты XML) с помощью PHP Преобразование разделенных запятыми строк в список Могу ли я использовать логическое «или» в случае с предложением оператора PHP? PHP is_file возвращает false (неправильно) для общего ресурса Windows на Ubuntu Оформить заказ на мою корзину заказов с помощью PayPal Динамичная генерация кнопки PayPal – не очень ли она небезопасна? Автоматическая отправка почты по определенным датам в PHP как удалить имя модуля из url в yii Создать POT-файл с помощью Poedit Apache не загружает Xdebug, но делает это при запуске из командной строки

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