删除字符串

Remove pieces of string

好的,我已将 .txt 文件的内容导入到数组中,但我在删除数组中字符串的某些部分时遇到了问题。这是数组的示例输出:

[55] =>                      28649706-20440929           73,66    02    
[57] =>                      28613238-20600568          255,56    03  
[59] =>                      40595693002                777,16    04  
[79] =>                      078-50-4327086             691,24    02

我愿意:

  1. 如果字符串只有一个连字符,如[55]和[57],删除字符串的第一部分连字符,

  2. 如果字符串有 2 个连字符,如 [79],请保持原样,

  3. 删除所有数组元素中的最后 2 个数字,
  4. 我想将它导出到 .csv 文件中,字符串的每个部分都在其自己的列中,假设我需要分隔符,或者我需要将这些字符串拆分到它自己的子数组中?

到目前为止,我已经解决了第 1 个问题。 3、删除数组元素的最后2个字符:

$content = file_get_contents($_FILES['file']['tmp_name']);
$output = explode("\n", $content);

foreach ($output as $key => $index) {
    $string = preg_replace('/\X{3}\z/u', '', $output);
}

仍然,我在删除带有 2 个连字符的部分字符串并将其输出到 .csv 中的单独列中时遇到问题。

谢谢。

编辑:

我已经成功创建了可下载文件,但数据的结构与预期不符,它们都放在第一行,我想将它放在每个单独的列中:

header('Content-Encoding: UTF-8');
header('Content-Type: text/csv; charset=utf-8' );
header(sprintf('Content-Disposition: attachment; filename='.$_FILES['file']['name'].'-%s.csv', date( 'dmY-His' )));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
ob_end_clean();

$fp = fopen("php://output", 'w');
fputcsv($fp, $string);

fclose($fp);
die();

我建议

$string = preg_replace('~^\s*(?:\d+-(?=\d[^-]*$))?|\s+\d+\s*$~', '', $output);

regex demo

详情

  • ^ - 字符串开头
  • \s* - 0+ 个空格
  • (?:\d+-(?=\d[^-]*$))? - 一个可选的序列
    • \d+ - 1+ 位数
    • - - 一个连字符
    • (?=\d[^-]*$) - 一个积极的前瞻,需要一个数字,然后是除 - 之外的任何 0+ 个字符,直到字符串结尾
  • | - 或
  • \s+ - 1+ 个空格
  • \d+ - 1+ 位数
  • \s* - 0+ 个空格
  • $ - 字符串结尾。