Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,Regex-如何使用preg\u replace转义?_Php_Regex_Escaping - Fatal编程技术网

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
-只要说
转义
,你就把它放到了字符串解析的领域,这比你想象的要复杂得多。