3

你好吗?我有下一个任务。我有很多可以包含重复斜杠的字符串。我需要将重复的斜杠替换为一个斜杠(任何数量的斜杠),但是当在斜杠之后找到下一个符号(引号、双引号、NUL(NULL 字节))时 - 所有斜杠都应该被删除。谢谢。我的语言 - PHP。一些测试:

$s1 = 'test\\\\string';
// test\string
$s2 = 'test\\\\\"\\\\\'\\\\string';
// test"'\string
$s3 = 'test\\string\\\\\"';
// test\string"
4

5 回答 5

5

采用

preg_replace("~\\\\+([\"\'\\x00\\\\])~", "$1", $string);

\用一个替换任意数量的\

该模式由任意初始反斜杠\\\\+和以下符号组成,该符号是"'\x00或之一\。替换将有效地删除任何前面的反斜杠。

您的正则表达式中需要 4 个反斜杠。两个反斜杠 ( \\) 将导致\正则表达式字符串中的一个反斜杠 (),因为 PHP 解释器使用反斜杠来转义特殊字符,如"or \。出于同样的原因,您将需要在正则表达式中使用两个反斜杠。

或者反过来解释:要获得\+正则表达式,您必须添加一个反斜杠来告诉 PCRE 一个反斜杠不是用于转义+. 要获取\\+字符串,您还需要在每个反斜杠之前添加一个反斜杠,以告诉 PHP 解释器您不想用第一个反斜杠转义第二个反斜杠。

源代码:\\\\+

在正则表达式字符串中:\\+

模式匹配:\+

于 2012-04-05T09:25:24.523 回答
2

将 2 个或多个连续斜杠替换为单个斜杠 preg_replace('/\\\\+/','\\',$str);

于 2012-04-05T09:25:30.033 回答
2

替代方式。

$s = 't\est\\\\\\\\\\\\stri\\\\\"\\\\\'\\\\0\\\\ng';
$s = preg_replace('~\\\\+~', '\\', $s);
$s = str_replace(array('\\"', '\\\'', '\\0'), array('"', '\'', "\0"), $s);
于 2012-04-05T09:43:50.253 回答
1

试试这些:

preg_replace("/\\+(['\"\0\\])/", "$1", $string);
于 2012-04-05T09:34:09.667 回答
0

stripslashes有什么问题?它解释了转义“特殊”字符的斜线并删除了“额外”斜线。

于 2012-04-05T09:20:27.127 回答