Php 删除内容行中断tsv
我正试图清理一个TSV文件(从excel电子表格中复制),以便读入PHP 我需要能够做的是删除TSV内容部分的任何换行符,但不删除每行末尾的换行符,知道如何通过使用正则表达式或其他函数来实现这一点 示例数据(我突出显示了选项卡):Php 删除内容行中断tsv,php,regex,excel,tsv,Php,Regex,Excel,Tsv,我正试图清理一个TSV文件(从excel电子表格中复制),以便读入PHP 我需要能够做的是删除TSV内容部分的任何换行符,但不删除每行末尾的换行符,知道如何通过使用正则表达式或其他函数来实现这一点 示例数据(我突出显示了选项卡): 编辑:进一步调查后,如果excel在实际单元格值中遇到“错误”,它会将其分隔为“”,这将导致下面的正则表达式出现问题,其他人是否有解决方案?主要的困难是区分开始引号和结束引号 您可以使用此替换(我放置了一个#作为替换字符串只是为了查看,您显然可以使用您想要的,一个空格
编辑:进一步调查后,如果excel在实际单元格值中遇到“错误”,它会将其分隔为“”,这将导致下面的正则表达式出现问题,其他人是否有解决方案?主要的困难是区分开始引号和结束引号 您可以使用此替换(我放置了一个#作为替换字符串只是为了查看,您显然可以使用您想要的,一个空格,一个空字符串…):
$pattern=我的问题解决方案:
/\n(.+\n[^\t])+.+/
使用上面的模式,您可以准确地获取您提到的引号之间的字符串
在这里,您可以使用preg match和模式来获取引号之间的字符串。然后使用pre_replace替换新行
preg_replace(“/\n/”,“”,$match);换句话说,您想删除双引号之间的换行符吗?是的-这是一种更简单的方式!我们能找到转义引号吗““
在引用内容之外?如果单元格中有双引号,但没有新行,则不会转义双引号。如果单元格有一个双引号和一个新行,整个单元格将用双引号括起来,双引号将被转义。我将为此更新我的模式。最后一件事,左边的第一个单元格是否由制表符分隔?(还是什么都没有?)
$pattern = <<<'EOD'
~
(?: # entry points:
(?!\A)\G # - contiguous to a precedent match
| # OR
(?:^|\t)" #"# - quote preceded by a start of line or a tab
)
(?>
[^\r\n"\t]+ #"# all execpt tabs, newlines and quotes
|
"" # escaped quote
)*
\K # remove all on the left from match result
(?:
\R # newline
|
"(*SKIP)(?!) #"# closing quote (skipped)
)
~xm
EOD;
$data = preg_replace($pattern, '#', $data);
/\n(.+\n[^\t])+.+/