我有以下文字,我试图摆脱\'
。期望的输出为"Gigi DAgostino"
。
"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 th )\
?
我对正则表达式不太熟悉,所以我可能会遗漏一些非常简单的东西。
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"
答案 0 :(得分:0)
您可以使用str_replace()函数
echo str_replace("\'","","Gigi D\'Agostino")
答案 1 :(得分:0)
如果你开始使用单引号分隔模式,例如'/'/'
(没有转义任何东西),你会注意到分隔符/
超出单引号模式,这会导致错误。通过使用'
转义\
,分隔符将返回到单引号模式,并且单引号将被转义。如果您使用模式\'
继续该过程,则应该明白发生了什么,并注意到该过程本身的模式。
'/'/' - error: / delimiter outside of pattern
'/\'/' - escape '
'/\\'/' - escape \, unescape ', error: / delimiter outside of pattern
'/\\\'/' - escape ', unescape \
'/\\\\'/' - escape \, unescape ', error: / delimiter outside of pettern
'/\\\\\'/' - escape ', escape \
如果你继续并在模式中添加另一个\
,猜猜会发生什么?是的,除了模式之外的分隔符...希望这会对正在发生的事情有所了解。