Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式删除CSV文件中引号之间出现的任何换行符_Php_Regex_Csv - Fatal编程技术网

Php 正则表达式删除CSV文件中引号之间出现的任何换行符

Php 正则表达式删除CSV文件中引号之间出现的任何换行符,php,regex,csv,Php,Regex,Csv,我试图找到一个正则表达式,它将匹配CSV文件中双引号分隔字符串之间的任何换行符 我能够使用此正则表达式识别引号之间的字符串: []?:\\.[^\]*?\1 我可以使用以下正则表达式识别换行符:\r\n |\r |\n 但我不确定如何将两者“结合”起来,以获得我需要的表达式 表达式应仅匹配双引号之间的换行符。因为,将两个正则表达式分别组合,如下所示: <?php $testString = <<<EOF a,b,c,d,"test test2 test3",zzz zz,

我试图找到一个正则表达式,它将匹配CSV文件中双引号分隔字符串之间的任何换行符

我能够使用此正则表达式识别引号之间的字符串: []?:\\.[^\]*?\1

我可以使用以下正则表达式识别换行符:\r\n |\r |\n

但我不确定如何将两者“结合”起来,以获得我需要的表达式

表达式应仅匹配双引号之间的换行符。

因为,将两个正则表达式分别组合,如下所示:

<?php
$testString = <<<EOF
a,b,c,d,"test
test2
test3",zzz
zz,yy,vv,"a
b
"
uuu,ttt,"xyz",zzz
aaa,bbb,ccc
ddd,"","a","zz"
xyz,abc,"a
b
c
"
"
a,c,d,"
dadasda"
EOF;

function remove_eol($matches) {
    //var_dump($matches);
    return preg_replace('/\R/', '', $matches[0]);
}

$testStringWithoutEnclosedEol = preg_replace_callback('/(["])(?:\\\\.|[^\\\\])*?\1/', 'remove_eol', $testString);

?>
<?php var_dump($testStringWithoutEnclosedEol); ?>
简单地

\R
line break: matches \n, \r and \r\n


我必须在传递给preg_replace_callback的字符串中添加额外的\项…

因此字符串之间用换行符或双引号分隔。举个例子,为什么要把它们结合起来呢?用一个字符串抓取字符串并用另一个字符串替换。fgetcsv可以处理这个问题,可能与Lookahead和Lookahead有关。但是现在无法调试解决方案。太好了!我正在考虑做类似的事情,但不确定正则表达式是否能自己处理。非常感谢。如果对你有效,请接受我的回答-
\R
line break: matches \n, \r and \r\n