你好吗?我有下一个任务。我有很多可能包含重复斜杠的字符串。我需要将重复的斜杠替换为一个斜杠(任意数量的斜杠),但是当斜杠后找到下一个符号(引号、双引号、NUL(NULL 字节))时 - 所有斜杠都应被删除。谢谢。我的语言 - PHP。一些测试:
$s1 = 'test\\\\string';
// test\string
$s2 = 'test\\\\\"\\\\\'\\\\string';
// test"'\string
$s3 = 'test\\string\\\\\"';
// test\string"
Run Code Online (Sandbox Code Playgroud)
使用
preg_replace("~\\\\+([\"\'\\x00\\\\])~", "$1", $string);
Run Code Online (Sandbox Code Playgroud)
将任意数量的 替换\为 1 \。
该模式由任意初始反斜杠\\\\+和以下符号组成,该符号是"、'、\x00或之一\。替换将有效地删除任何前面的反斜杠。
正则表达式中需要 4 个反斜杠。正则表达式字符串中两个反斜杠 ( \\) 将导致一个反斜杠 ( ),因为 PHP 解释器使用反斜杠来转义或 等特殊字符。出于同样的原因,您的正则表达式中需要两个反斜杠。\"\
或者以另一种方式解释:要获得\+正则表达式,您必须添加一个反斜杠来告诉 PCRE,一个反斜杠不是用于转义+. 要获取\\+字符串,您还需要在每个反斜杠之前添加一个反斜杠,以告诉 PHP 解释器您不想用第一个反斜杠转义第二个反斜杠。
源代码:\\\\+
正则表达式字符串内部:\\+
模式匹配:\+