删除两个不同字符序列之间的换行符

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 标志以允许点跨行匹配。