【发布时间】:2012-11-21 09:46:26
【问题描述】:
我只需要删除LF,而不是CRLF。有什么想法吗?
我可以使用 PHP、notepad++、shell 脚本等
【问题讨论】:
-
您需要删除LF,还是用CRLF替换它?
-
全部 LF 还是只有一个之前没有 CR 的?
-
@stema 我需要删除所有没有 CR 的 LF。只有这种情况。
我只需要删除LF,而不是CRLF。有什么想法吗?
我可以使用 PHP、notepad++、shell 脚本等
【问题讨论】:
在记事本++中
试试这个:(?<!\r)\n
请务必在搜索选项中设置正则表达式选项,希望对您有所帮助
【讨论】:
\r(?<!\n) 并没有让我找到只有 CR 而不是 LF...但我随后尝试了这种确实有效的变体:\r^
\r[^\n]+。这个可能会更好,因为它不依赖于“line-end”,这对于单独的 CR 来说是模糊的......
【讨论】:
在 Notepad++ 中,您使用搜索/替换、勾选扩展(左下方)和替换
\n
什么都没有。
【讨论】:
LF 代表换行符,它是 ASCII 10 或 0x0A 或 "\n"(在 PHP 中)。所以就去做吧
search_replace( "\n", '', $text)
请注意 CRLF 实际上是两个字符 CR(回车)+ LF。如果您删除 LF,您的文本中仍会包含 CR(如果有)。
编辑
如果您只想删除独立的 LF,但保留 CRLF,那么上面的代码是错误的,因为它会将 CRLF 转换为 CR。使用preg_replace() 来做到这一点
preg_replace("/(?<!\\r)\\n+(?!\\r)/", '', $text);
如果出于任何原因您不想使用preg_replace()(但无论如何都要使用它),那么您可以尝试这种愚蠢的方法:
// save CRLFs by replacing with some text that does
$tmp = str_replace("\r\n", 'S0m3L1k3LyUn1Qu3T3X7', $text);
// get rid of LFs
$tmp = str_replace("\n", '', $tmp );
// restore CRLFs
$text = str_replace('S0m3L1k3LyUn1Qu3T3X7', "\r\n", $tmp);
【讨论】: