删除字符串
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
我愿意:
如果字符串只有一个连字符,如[55]和[57],删除字符串的第一部分连字符,
如果字符串有 2 个连字符,如 [79],请保持原样,
- 删除所有数组元素中的最后 2 个数字,
- 我想将它导出到 .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);
详情
^
- 字符串开头
\s*
- 0+ 个空格
(?:\d+-(?=\d[^-]*$))?
- 一个可选的序列
\d+
- 1+ 位数
-
- 一个连字符
(?=\d[^-]*$)
- 一个积极的前瞻,需要一个数字,然后是除 -
之外的任何 0+ 个字符,直到字符串结尾
|
- 或
\s+
- 1+ 个空格
\d+
- 1+ 位数
\s*
- 0+ 个空格
$
- 字符串结尾。
好的,我已将 .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
我愿意:
如果字符串只有一个连字符,如[55]和[57],删除字符串的第一部分连字符,
如果字符串有 2 个连字符,如 [79],请保持原样,
- 删除所有数组元素中的最后 2 个数字,
- 我想将它导出到 .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);
详情
^
- 字符串开头\s*
- 0+ 个空格(?:\d+-(?=\d[^-]*$))?
- 一个可选的序列\d+
- 1+ 位数-
- 一个连字符(?=\d[^-]*$)
- 一个积极的前瞻,需要一个数字,然后是除-
之外的任何 0+ 个字符,直到字符串结尾
|
- 或\s+
- 1+ 个空格\d+
- 1+ 位数\s*
- 0+ 个空格$
- 字符串结尾。