我遇到了以下问题。
我想在特定的地方分割一个字符串。它曾用于处理csv文件。
以下情况:
我的CSV文件是这样的:
33333|'AB'|'01.01.2014'|'short'44444|'AB'|'01.01.2014'|'short'11111|'AB'|'01.01.2014'|'short'
这意味着:我在开头有一个包含5位数的ID,我想拆分这个字符串并将其解析成一个数组。我想使用preg_split,但我怎么能这样做?我认为匹配这部分:
'44444|
现在特别的愿望:我想把这5个数字放到我的数组中。所以我想访问部分,preg_split拼接 - 这可能吗?
非常感谢您提前
答案 0 :(得分:1)
这就是你想要的吗?
$str = "33333|'AB'|'01.01.2014'|'short'44444|'AB'|'01.01.2014'|'short'11111|'AB'|'01.01.2014'|'short'";
$res = preg_split('/(\b\d{5}\|)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($res);
<强>输出:强>
Array
(
[0] => 33333|
[1] => 'AB'|'01.01.2014'|'short'
[2] => 44444|
[3] => 'AB'|'01.01.2014'|'short'
[4] => 11111|
[5] => 'AB'|'01.01.2014'|'short'
)
答案 1 :(得分:0)
你不一定需要正则表达式:
$array = explode('|', $your_csv_data);
将为您提供csv值的数组。这当然只有在管道字符不能出现在实际值中时才有效。如果您希望第一项作为数据集的键,则可以执行以下操作:
$key = array_shift($array);
$list_of_csv_datas[$key] = $array;
如果我误解你,请纠正我。
答案 2 :(得分:0)
我认为您正在尝试根据之前存在的边界将字符串拆分为5位数字。
<?php
$string="33333|'AB'|'01.01.2014'|'short'44444|'AB'|'01.01.2014'|'short'11111|'AB'|'01.01.2014'|'short'";
$regex = '~(?<!^)(?=\d{5})~';
$splits = preg_split($regex, $string);
print_r($splits);
?>
<强>输出:强>
Array
(
[0] => 33333|'AB'|'01.01.2014'|'short'
[1] => 44444|'AB'|'01.01.2014'|'short'
[2] => 11111|'AB'|'01.01.2014'|'short'
)
答案 3 :(得分:0)
这实际上是一个解析问题,而不是正则表达式问题。 PHP有几个用于解析CSV数据的内置函数:
如果要将整行解析为数组,可以使用str_getcsv(),如下所示:
$csv = "33333|'AB'|'01.01.2014'|'short'44444|'AB'|'01.01.2014'|'short'11111|'AB'|'01.01.2014'|'short'";
$csvArray = str_getcsv($csv, "|", "'");
print_r($csvArray);
这给了你:
Array
(
[0] => 33333
[1] => AB
[2] => 01.01.2014
[3] => short44444
[4] => AB
[5] => 01.01.2014
[6] => short11111
[7] => AB
[8] => 01.01.2014
[9] => short
)
或者,如果您真的只想要第一列,那么您可以直到第一个|
分隔符上的所有内容:
echo substr($csv, 0, strpos($csv, '|'));