PHP,Regex-如何使用preg\u replace转义?
我想用PHP,Regex-如何使用preg\u replace转义?,php,regex,escaping,Php,Regex,Escaping,我想用\\n替换\n,用\\a替换\a,依此类推 这是我的正则表达式: 模式: ([\\]) 应替换为: $1$1 因此,如果输入字符串是\n,它将被替换为\n。 (我已经在进行了测试,并且效果良好) 然后我得到了以下PHP代码: preg_replace('/([\\])/', '$1$1', "\n a"); 并认为它会输出\n a,但我得到了以下错误: Warning: preg_replace(): Compilation failed: missing terminating
\\n
替换\n
,用\\a
替换\a
,依此类推
这是我的正则表达式:
模式:
([\\])
应替换为:
$1$1
因此,如果输入字符串是\n
,它将被替换为\n
。
(我已经在进行了测试,并且效果良好)
然后我得到了以下PHP代码:
preg_replace('/([\\])/', '$1$1', "\n a");
并认为它会输出\n a,但我得到了以下错误:
Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 5
所以我逃过了[
现在我的代码是
preg_replace('/(\[\\])/','$1$1',"\n a");
但是……这并不是我想要的,因为现在它没有用\\n
替换\n
我做错了什么?使用另一个分隔符并添加反斜杠:
<?php
echo preg_replace('~([\\\])~', '$1$1', '\n a');
// output: \\n a
?>
您不需要使用
preg\u replace
,您可以使用str\u replace
,因为您没有匹配模式。您需要将主题字符串放在单引号中,否则\n
将被视为换行符的转义序列
str_replace('\\', '\\\\', '\n a');
请参见
[\\]
是一个错误的转义,您需要4个反斜杠来表示一个文字\
。我建议使用常规的str\u替换数组进行搜索,并替换为映射的空白及其文字表示。您还需要更改“\n a”
到'\n a'
。转义序列在双引号内进行解释,因此\n
是一个换行符,而不是紧跟n
的反斜杠。您有任何测试框架吗?您只是针对吗?正如Barmar回答的那样,preg\u replace
是不需要的。此外,为什么要使用捕获组?除非您提供更多上下文t、 没有真正的解决方案。如何转义\n
-只要说转义
,你就把它放到了字符串解析的领域,这比你想象的要复杂得多。