У меня есть следующий текст, и я пытаюсь избавиться от \'
. Требуемый вывод: "Gigi DAgostino"
.Замена обратной косой черты с использованием preg_replace
"Gigi D\'Agostino"
Я проверил несколько других вопросов, касающихся замены с обратной косой черты preg_replace
, и узнал, что мне нужно удвоить денешься. Поэтому я провел несколько экспериментов.
echo preg_replace("/\\\/", "", "Gigi D\'Agostino"); // Gigi D'Agostino
echo preg_replace("/'/", "", "Gigi D\'Agostino"); // Gigi D\Agostino
echo preg_replace("/\\\\'/", "", "Gigi D\'Agostino"); // Gigi DAgostino
Пока что так хорошо. Это имеет смысл. Но в моем фактическом коде я использовал одинарные кавычки для шаблонов.
echo preg_replace('/\\\/', "", "Gigi D\'Agostino"); // Gigi D'Agostino
echo preg_replace('/\'/', "", "Gigi D\'Agostino"); // Gigi D\Agostino
echo preg_replace('/\\\\\'/', "", "Gigi D\'Agostino"); // Gigi DAgostino
Опять же, первые два имеют смысл. У меня нет третьего. Зачем нужна дополнительная косая черта?
'/ (\\)->\ (\)->' /'
^ ^
| |
these two this one
escape the escapes
next \ the following '
Какова роль заемного (5 го) \
?
Я не очень хорошо знаком с регулярным выражением, поэтому мне может быть что-то очень простое здесь.
PS: Я не ищу способ заменить обратную косую черту. Вышеприведенные примеры уже делают это. Я пытаюсь понять, как это происходит.
$str = "Gigi D\'Agostino";
# \ escapes '
echo preg_replace('/\'/', "", $str) . PHP_EOL; # "Gigi D\Agostino"
# can't escape \ with a single \. it requires two \
echo preg_replace('/\\/', "", $str) . PHP_EOL; # No ending delimiter '/' found
# \\ escapes the third \
echo preg_replace('/\\\/', "", $str) . PHP_EOL; # "Gigi D'Agostino"
# now we combine the patterns. we replace \'
# we need to escape both \ and '
# double backslashes to escape \, and a single backslash to escape '
# makes four backslashes and an apos: \\\ \'
# but ofc, this doesn't work. requires an additional \
echo preg_replace('/\\\\\'/', "", $str) . PHP_EOL; # "Gigi DAgostino"
Любые причины не использовать http://php.net/manual/en/function.stripslashes.php? – chris85
В одинарных кавычках обратная косая черта * ускользает от себя * и одинарной кавычки. PCRE просто нуждается в скрытой обратной косой чертой. Просто «распечатайте» свои строки, чтобы увидеть, в каких фактических значениях строк они были маркированы. – mario
@ chris85 Я также снимаю/заменяю другие символы, которые хранятся в 2D-массиве [pattern, substitute]. Кроме того, мне нравится разобраться. – akinuri