用PHP中的换行符替换文字字符串\ r \ n的问题

问题描述 投票:2回答:5

我有一个文本文件,其中包含文字字符串\r\n。我想用实际的换行符(\ n)代替它。

我知道正则表达式/\\r\\n/应该匹配它(我已经在Reggy中对其进行了测试,但是我无法使其在PHP中工作。

我尝试了以下变体:

preg_replace("/\\\\r\\\\n/", "\n", $line);

preg_replace("/\\\\[r]\\\\[n]/", "\n", $line);

preg_replace("/[\\\\][r][\\\\][n]/", "\n", $line);

preg_replace("/[\\\\]r[\\\\]n/", "\n", $line);

如果我只是尝试替换反斜杠,它将正常工作。一旦添加r,便找不到匹配项。

我正在读取的文件编码为UTF-16。

编辑:

我也已经尝试过使用str_replace()

我现在认为这里的问题是文件的字符编码。我尝试了以下方法,它确实起作用:

$testString = "\\r\\n";
echo preg_replace("/\\\\r\\\\n/", "\n", $testString);

但是它不适用于我从文件中读取的行。

php regex preg-replace backslash
5个回答
2
投票

UTF-16是问题。如果您只处理原始字节,则可以使用完整序列进行替换:

$out = str_replace("\x00\x5c\x00\x72\x00\x5c\x00\x6e", "\x00\x0a", $in);

这假定为大端UTF-16,否则将零字节交换为非零之后:

$out = str_replace("\x5c\x00\x72\x00\x5c\x00\x6e\x00", "\x0a\x00", $in);

如果不起作用,请发布输入文件的字节转储,以便我们可以看到它实际包含的内容。


5
投票

[省去正则表达式的麻烦,而尝试使用str_replace()

str_replace('\r\n', "\n", $string);

3
投票

[省去双引号内的正则表达式和转义的工作:

$fixed = str_replace('\r\n', "\n", $line);

对于它的价值,preg_replace("/\\\\r\\\\n/", "\n", $line);应该很好。作为演示:

var_dump(preg_replace("/\\\\r\\\\n/", "NL", 'Cake is yummy\r\n\r\n'));

给出:string(17) "Cake is yummyNLNL"

也可以是:'/\\\r\\\n/''/\\\\r\\\\n/'

重要-如果上述方法不起作用,您甚至确定要尝试匹配的文字\r\n吗?..


1
投票
$result = preg_replace('/\\\\r\\\\n/i', '\n', $subject);

1
投票

我一直在寻找这个主题,而且我总是回到我写的个人专栏。

看起来很整洁,它基于RegEx:

 "/[\n\r]/"

PHP

 preg_replace("/[\n\r]/",'\n', $string )

 preg_replace("/[\n\r]/",$replaceStr, $string )
© www.soinside.com 2019 - 2024. All rights reserved.