php - 正则表达式删除 CSV 文件中引号之间出现的任何换行符
问题描述
我试图找到一个正则表达式,它将匹配 CSV 文件中双引号分隔的字符串之间的任何换行符。
我能够使用此正则表达式识别引号之间的字符串:
(["])(?:\\.|[^\\])*?\1
我可以使用这个正则表达式来识别换行符: (\r\n|\r|\n)
但我不确定如何将两者“结合”以获得我需要的表达。
该表达式应仅匹配双引号之间存在的换行符。
解决方案
正如@fyroc 建议的那样,分别组合这两个正则表达式,如下所示:
<?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\n|\r|\n)
简单来说
\R
line break: matches \n, \r and \r\n
见https://www.php.net/manual/en/regexp.reference.escape.php
而且我必须在传递给 preg_replace_callback 的字符串中添加额外的 \...
推荐阅读
- haskell - 如何找到提供导入的库?
- django - 在 django 管理数据库中,我没有得到预期的视图
- php - Laravel Markdown 电子邮件不起作用没有为 [mail] 定义提示路径
- javascript - 如何使用反应检查元素是否存在?
- python - 如何返回连接的元组?
- javascript - 尝试使用 Google Apps 脚本将图像上传到 Graph API 时如何解决“异常:超出限制”错误?
- sql - BigQuery - 对结构数组求和
- python - 读取文件时如何修复“跳线”错误
- html - 滚动条在 Chrome 中不显示溢出-y:滚动
- libxml2 - 写入 XML 突然失败