Php 用于删除重复斜杠的正则表达式

Php 用于删除重复斜杠的正则表达式,php,regex,Php,Regex,你好吗?我有下一个任务。我有很多字符串可以包含重复的斜杠。我需要将重复的斜杠替换为一个斜杠(斜杠的任何计数),但是当斜杠(引号、双引号、NUL(空字节))之后找到下一个符号时,所有斜杠都应该删除。谢谢我的语言是PHP。一些测试: $s1 = 'test\\\\string'; // test\string $s2 = 'test\\\\\"\\\\\'\\\\string'; // test"'\string $s3 = 'test\\string\\\\\"'; // test\string"

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

$s1 = 'test\\\\string';
// test\string
$s2 = 'test\\\\\"\\\\\'\\\\string';
// test"'\string
$s3 = 'test\\string\\\\\"';
// test\string"
你怎么了?它解释转义“特殊”字符的斜杠,并删除“额外”斜杠。

使用

preg_replace("~\\\\+([\"\'\\x00\\\\])~", "$1", $string);
用一个
\
替换任意数量的
\

该图案由任意初始后斜
\\\\\+
和以下符号组成,该符号是
\x00
\
中的一个。替换后的后斜将有效地移除任何前向后斜

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

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

源代码:
\\+

正则表达式字符串内部:
\\+


模式匹配:
\+

将两个或多个连续斜杠替换为一个斜杠
preg\u replace('/\\+/'、'\\'、$str)

尝试以下方法:

preg_replace("/\\+(['\"\0\\])/", "$1", $string);
另一种方式

$s = 't\est\\\\\\\\\\\\stri\\\\\"\\\\\'\\\\0\\\\ng';
$s = preg_replace('~\\\\+~', '\\', $s);
$s = str_replace(array('\\"', '\\\'', '\\0'), array('"', '\'', "\0"), $s);

1) 我可以有很多斜杠,我需要在循环中运行stripslashes 2)stripslashes将
\a
转换为
a
。这是不正确的,谢谢。它起作用了。你也可以用str_replace看到我的答案。str_replace会做多个替换,所以你也可以替换多个反斜杠。我无法让它与str_replace一起工作,但如果您愿意,请尝试一下。:-)为了替换前斜杠:
preg\u replace('/\/\/+/','/',$string)