使用php将文本文件中的(CR)和(LF)的任意组合替换为单个(CRLF)

使用php将文本文件中的(CR)和(LF)的任意组合替换为单个(CRLF),php,regex,preg-replace,str-replace,Php,Regex,Preg Replace,Str Replace,在不同的文本文件中(或者在单个文本文件中),我有不同的行尾组合(参见下面的示例) 如何用一个简单的CRLF统一CR和LF的所有组合? 简单地说,我需要用一个使用PHP的CRLF替换每个CR和LF组合。 使用str_replace,我可以替换它们,但我的问题是使用正确的搜索字符串 $textfile=str_replace("search string i need","CRLF to replace", $textfile); 要修复的通用文本文件示例: text line 1 CRLFLFC

在不同的文本文件中(或者在单个文本文件中),我有不同的行尾组合(参见下面的示例)

如何用一个简单的CRLF统一CR和LF的所有组合? 简单地说,我需要用一个使用PHP的CRLF替换每个CR和LF组合。 使用str_replace,我可以替换它们,但我的问题是使用正确的搜索字符串

$textfile=str_replace("search string i need","CRLF to replace", $textfile);
要修复的通用文本文件示例:

text line 1 CRLFLFCRCRLF
text line 2 LFLFCRLFCRCR
text line 3 CRLF
text line 4 CR
text line 5 LF
我需要将所有\r\n随机组合替换为如下\r\n:

text line 1 CRLF
text line 2 CRLF
text line 3 CRLF
text line 4 CRLF
text line 5 CRLF

你并不需要正则表达式:

str_replace(["\r\n", "\r", "\n"], "\r\n", $str);

这将替换数组中的每一个字符串(并保持顺序,因此如果您有
\r\n
,它将不会被替换为
\r\n\r\n
)。

您不需要正则表达式:

str_replace(["\r\n", "\r", "\n"], "\r\n", $str);

这将替换数组中的每一个字符串(并保持顺序,因此如果您有
\r\n
,它将不会被替换为
\r\n\r\n
)。

PCRE对任何换行组合都有别名:
\r

你可以这样做:

$text = preg_replace('~\R~', "\r\n", $text);
默认情况下,
\R
匹配CR、LF或CRLF,但如果要将
\R
的含义扩展到任何unicode换行符序列,请使用u修饰符:

$text = preg_replace('~\R~u', "\r\n", $text);

PCRE对任何换行组合都有别名:
\R

你可以这样做:

$text = preg_replace('~\R~', "\r\n", $text);
默认情况下,
\R
匹配CR、LF或CRLF,但如果要将
\R
的含义扩展到任何unicode换行符序列,请使用u修饰符:

$text = preg_replace('~\R~u', "\r\n", $text);

要将“\r\n”的所有组合替换为“\r\n”,请使用:

$result = preg_replace('/[\r\n]+/', "\r\n", $text);

这也会将单个'\r'或'\n'替换为'\r\n'。

要将'\r\n'的所有组合替换为'\r\n',请使用:

$result = preg_replace('/[\r\n]+/', "\r\n", $text);

这也将用“\r\n”替换单个“\r”或“\n”。

欢迎使用SO!请阅读如何制定问题,以增加获得可用答案的机会。就目前而言,由于问题过于广泛,有太多不同的好答案。你可以通过包括你自己尝试过的内容来缩小范围。可能重复我修改的问题。现在好些了吗?对不起,这是我的第一个问题,下一个会更好。谢谢你理解我。欢迎来到SO!请阅读如何制定问题,以增加获得可用答案的机会。就目前而言,由于问题过于广泛,有太多不同的好答案。你可以通过包括你自己尝试过的内容来缩小范围。可能重复我修改的问题。现在好些了吗?对不起,这是我的第一个问题,下一个会更好。感谢您理解我。解析错误:语法错误,意外“[”,预期“)”您使用的是哪个版本的PHP?(对于旧版本,使用
Array(“\r\n”、“\r”、“\n”)
而不是
[“\r\n”、“\r”、“\n”]
)现在错误被修复了,但CRLF被乘以而不是修复。下面是我使用建议字符串的代码:$str1=file\u get\u contents($\u FILES['upload']['tmp\u name']);$str2=str\u replace(数组(“\r\n”、“\r”、“\n”)、“\r\n”、$str1);file\u put\u contents($\u FILES['upload'['tmp\u name']、$str1);我哪里搞错了?在将更改放进去之后,您没有使用
$str2
。谢谢您的回答。我按照您的建议,使用的字符串是:$str1=str\u replace(数组(“\n”,“\r”),“
”,$str1);不幸的是,它会在文件的每一端多次替换
,而我只需要一行
。如何修改?解析错误:语法错误,意外的“[”,期望“')您使用的是哪个版本的PHP?(对于旧版本,使用
数组(“\r\n”、“\r”、“\n”)
而不是
[“\r\n”、“\r”、“\n”]
)现在错误被修复了,但CRLF被乘以而不是修复。下面是我使用建议字符串的代码:$str1=file\u get\u contents($\u FILES['upload']['tmp\u name']);$str2=str\u replace(数组(“\r\n”、“\r”、“\n”)、“\r\n”、$str1);file\u put\u contents($\u FILES['upload'['tmp\u name']、$str1);我哪里搞错了?在将更改放进去之后,您没有使用
$str2
。谢谢您的回答。我按照您的建议,使用的字符串是:$str1=str\u replace(数组(“\n”,“\r”),“
”,$str1);不幸的是,它会在文件的每一端多次替换
,而我只需要一个
行和每行。如何修改?添加一个
+
量词将多个换行符替换为一个。添加一个
+
量词将多个换行符替换为一个。