Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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 删除内容行中断tsv_Php_Regex_Excel_Tsv - Fatal编程技术网

Php 删除内容行中断tsv

Php 删除内容行中断tsv,php,regex,excel,tsv,Php,Regex,Excel,Tsv,我正试图清理一个TSV文件(从excel电子表格中复制),以便读入PHP 我需要能够做的是删除TSV内容部分的任何换行符,但不删除每行末尾的换行符,知道如何通过使用正则表达式或其他函数来实现这一点 示例数据(我突出显示了选项卡): 编辑:进一步调查后,如果excel在实际单元格值中遇到“错误”,它会将其分隔为“”,这将导致下面的正则表达式出现问题,其他人是否有解决方案?主要的困难是区分开始引号和结束引号 您可以使用此替换(我放置了一个#作为替换字符串只是为了查看,您显然可以使用您想要的,一个空格

我正试图清理一个TSV文件(从excel电子表格中复制),以便读入PHP

我需要能够做的是删除TSV内容部分的任何换行符,但不删除每行末尾的换行符,知道如何通过使用正则表达式或其他函数来实现这一点

示例数据(我突出显示了选项卡):


编辑:进一步调查后,如果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])+.+/