删除两个不同字符序列之间的换行符
Removing line breaks between 2 different character sequences
我正在编辑一个包含隐藏换行符的 csv 文件。当我应用以下 php 脚本时,换行符已成功从整个文件中删除。
$csvFileNew = str_replace(array("\r", "\n"), '', $csvFileOld);
但我只想从文件的某些部分中删除这些换行符 - 在所有出现的以下内容之间(用单引号引起来):
$start = ',""';
$end = '",';
我当前的脚本如下所示:
$csvFileOld = "pre text appears here....,\"\"key words appear here\"\",....post text appears here";
//line break always appears between the final 2 quotation marks
$csvFileNew = preg_replace_callback('`,""([^"]*)",`', function($matches)
{
return str_replace(array("\r", "\n"), '', $matches[1]);
},$csvFileOld);
不幸的是,此脚本没有删除换行符 - 我假设我使用的正则表达式抓取不够。谁能提出一个优雅的解决方案?
我知道由于换行的原因,答案不可能包含一个有效的示例,但是我真的只是在寻找一个在分隔符之间获取正确内容的解决方案。
你可以使用
<?php
$csvFileOld = "pre text appears here....,\"\"key\n\n words\r\n appear\r\n here\"\",....post text appears here";
//line break always appears between the final 2 quotation marks
$csvFileNew = preg_replace_callback('`,""(.*?)",`s', function($matches)
{
return str_replace(array("\r", "\n"), '', $matches[1]);
},$csvFileOld);
echo $csvFileNew;
参见PHP demo。
,""(.*?)",
正则表达式现在匹配从 ,""
到第一次出现的 ",
子字符串。
添加了 s
标志以允许点跨行匹配。
我正在编辑一个包含隐藏换行符的 csv 文件。当我应用以下 php 脚本时,换行符已成功从整个文件中删除。
$csvFileNew = str_replace(array("\r", "\n"), '', $csvFileOld);
但我只想从文件的某些部分中删除这些换行符 - 在所有出现的以下内容之间(用单引号引起来):
$start = ',""';
$end = '",';
我当前的脚本如下所示:
$csvFileOld = "pre text appears here....,\"\"key words appear here\"\",....post text appears here";
//line break always appears between the final 2 quotation marks
$csvFileNew = preg_replace_callback('`,""([^"]*)",`', function($matches)
{
return str_replace(array("\r", "\n"), '', $matches[1]);
},$csvFileOld);
不幸的是,此脚本没有删除换行符 - 我假设我使用的正则表达式抓取不够。谁能提出一个优雅的解决方案?
我知道由于换行的原因,答案不可能包含一个有效的示例,但是我真的只是在寻找一个在分隔符之间获取正确内容的解决方案。
你可以使用
<?php
$csvFileOld = "pre text appears here....,\"\"key\n\n words\r\n appear\r\n here\"\",....post text appears here";
//line break always appears between the final 2 quotation marks
$csvFileNew = preg_replace_callback('`,""(.*?)",`s', function($matches)
{
return str_replace(array("\r", "\n"), '', $matches[1]);
},$csvFileOld);
echo $csvFileNew;
参见PHP demo。
,""(.*?)",
正则表达式现在匹配从 ,""
到第一次出现的 ",
子字符串。
添加了 s
标志以允许点跨行匹配。