У меня есть строка, которая выглядит как этотPHP preg_replace шаблон работает, если его неправильно?
../Clean_Smarty_Projekt/tpl/templates_c\.
../Clean_Smarty_Projekt/tpl/templates_c\..
Я хочу, чтобы заменить ../
, \.
и \..
с regulare выражением.
Раньше я делал это так:
$result = str_replace(array("../","\..","\."),"",$str);
И там (шаблон) должен быть в таком порядке, потому что изменение его делает вывод немного глючит. Поэтому я решил использовать регулярное выражение.
Теперь я придумал этот шаблон
$result = preg_replace('/(\.\.\/)|(\\[\.]{1,2})/',"",$str);
Что на самом деле возвращает только пустые строки ...
Причина: (\\[\.]{1,2})
В Regex101 его все ок. (Мне потребовалось пару минут, чтобы понять, что мне не нужен /g
в preg_replace)
Если я использую этот шаблон в preg_replace, я должен сделать (\\\\[\.]{1,2})
, чтобы заставить его работать. Но это явно неправильно, потому что я не искал двух косых черт.
Конечно, я знаю ускользающее русло (ускользающий слэш).
Почему этот матч не соответствует правильно?
да, это тоже работает, но на самом деле даже 3 косые неправильно, потому что слэш экранируется и follwed символ не имеет никакого спасения .... 3 Slashes означает, что я побег '[ 'также. Похож на меня. – Dwza
@Dwza с использованием 4 обратных косых черт, чтобы соответствовать одному обратному косую черту, не является «явно неправильным». Это на самом деле правильно. Когда парсер php получит 4 обратных слэша, он будет интерпретировать его как 2 обратную косую черту. Затем PHP передаст его в механизм регулярных выражений (2 обратных слэша), который интерпретируется как 1 обратная косая черта. Замечание: нет необходимости избегать точки в классе символов '[.]': Она теряет в себе значение регулярного выражения. – HamZa
@HamZa phuu .. похоже на игру «Китайский шепот»: D thx для этого объяснения. – Dwza