Php 正则表达式删除CSV文件中引号之间出现的任何换行符
我试图找到一个正则表达式,它将匹配CSV文件中双引号分隔字符串之间的任何换行符 我能够使用此正则表达式识别引号之间的字符串: []?:\\.[^\]*?\1 我可以使用以下正则表达式识别换行符:\r\n |\r |\n 但我不确定如何将两者“结合”起来,以获得我需要的表达式 表达式应仅匹配双引号之间的换行符。因为,将两个正则表达式分别组合,如下所示: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,
<?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