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

时间:2012-04-05 09:17:38

标签: php regex

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

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

5 个答案:

答案 0 :(得分:4)

使用

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

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

该模式由任意初始后退\\\\+和后续符号组成,后面的符号是"'\x00\之一。替换将有效地删除任何先前的后退。

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

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

源代码:\\\\+

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

模式匹配:\+

答案 1 :(得分:2)

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

答案 2 :(得分:2)

替代方式。

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

答案 3 :(得分:1)

试试这些:

preg_replace("/\\+(['\"\0\\])/", "$1", $string);

答案 4 :(得分:0)

stripslashes出了什么问题?它解释了逃避“特殊”字符的斜线并删除了“额外”斜杠。