如何使用PHP删除转义的正斜杠?

时间:2014-02-21 18:32:38

标签: php regex

我正在使用Google Drive API,而我获得的refresh_token有一个转义正斜杠。虽然这应该是有效的JSON,但API在调用refreshToken()时不会接受它。我正在尝试使用preg_replace删除反斜杠:

$access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
$access_token = preg_replace('/\\\//', '/', $access_token);

我希望返回的字符串为:

"1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";

我尝试了各种表达式,但要么不删除反斜杠,要么返回空字符串。请注意,我不想删除所有反斜杠,只删除正斜杠的反斜杠。

7 个答案:

答案 0 :(得分:9)

避免正则表达式,只需使用str_replace

$access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
$access_token = str_replace( '\/', '/', $access_token );
//=> 1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8

答案 1 :(得分:8)

嗯,有一个标准函数可以做到这一点:stripslashes

所以请避免使用正则表达式,str_replace等。

这很简单:

$access_token = stripslashes($access_token);

答案 2 :(得分:1)

您可以使用其他分隔符。在这里,我选择使用~作为分隔符,而不是/

$access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
$access_token = preg_replace('~\\\/~', '/', $access_token);

print $access_token;

返回:

1/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8

答案 3 :(得分:1)

<?php
$access_token = "1\/MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8";
echo str_replace("\\","",$access_token);
?>

<强>输出:

  

1 / MgotwOvbwZN9MVxH5PrLR2cpvX1EJl8omgYdA9rrjx8

答案 4 :(得分:0)

这对你有用:

$access_token = preg_replace('|\\\\|', '', $access_token);

答案 5 :(得分:0)

1\\/Mg\otw\\\/Btow这样的字符串会发生什么?

如果您的字符串使用双引号插值转义符,那么简单的查找\/替换/将无效。

您必须将此用于特定的non-\转义字符:'~(?<!\\\)((?:\\\\\\\)*)\\\(/)~'

查找 - (?<!\\)((?:\\\\)*)\\(/)
替换 - $1$2

答案 6 :(得分:0)

这对我有用(使用负向前瞻):

$pattern = "/(?!\/)[\w\s]+/"
preg_match($pattern, $this->name,$matches)
$this->name = $matches[0]

之前的名字: WOLVERINE WORLD WIDE INC / DE /

之后的名字: WOLVERINE WORLD WIDE INC DE