用逗号分割字符串而不是在双引号内

发布于 2024-10-12 11:05:27 字数 507 浏览 0 评论 0原文

我想用逗号分隔以下字符串。

1,"x1",43,"tr","y,7"

结果数组应如下所示。

[
    0 => '1',
    1 => '"x1"',
    2 => '43',
    3 => '"tr"',
    4 => '"y,7"'
]

简而言之,如果逗号位于引号之间,则不应考虑逗号。

如果我使用爆炸,我会得到以下结果,这是我不想要的。

[
    0 => '1',
    1 => '"x1"',
    2 => '43',
    3 => '"tr"',
    4 => '"y',
    5 => '7"'
]

我被困在这里,请帮忙。

I want to split following string with a comma.

1,"x1",43,"tr","y,7"

Result array should be like following.

[
    0 => '1',
    1 => '"x1"',
    2 => '43',
    3 => '"tr"',
    4 => '"y,7"'
]

In short, it should not consider comma if it is between quotes.

If I use explode, I will get following result, which I don't want.

[
    0 => '1',
    1 => '"x1"',
    2 => '43',
    3 => '"tr"',
    4 => '"y',
    5 => '7"'
]

I am stuck here, please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

伤痕我心 2024-10-19 11:05:27

尝试 str_getcsv

<?php

$s = '1,"x1",43,"tr","y,7"';
$result = str_getcsv($s);
var_dump($result);
echo "\n";

// array(5) {
//   [0]=>
//   string(1) "1"
//   [1]=>
//   string(2) "x1"
//   [2]=>
//   string(2) "43"
//   [3]=>
//   string(2) "tr"
//   [4]=>
//   string(3) "y,7"
// }


?>

Try str_getcsv:

<?php

$s = '1,"x1",43,"tr","y,7"';
$result = str_getcsv($s);
var_dump($result);
echo "\n";

// array(5) {
//   [0]=>
//   string(1) "1"
//   [1]=>
//   string(2) "x1"
//   [2]=>
//   string(2) "43"
//   [3]=>
//   string(2) "tr"
//   [4]=>
//   string(3) "y,7"
// }


?>
短暂陪伴 2024-10-19 11:05:27

以下片段:

$s = '1,"x1",43,"tr","y,7"';
print_r(preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $s));

产生:

Array
(
    [0] => 1
    [1] => "x1"
    [2] => 43
    [3] => "tr"
    [4] => "y,7"
)

ideone 上所示。

正则表达式 ,(?=([^"]*"[^"]*")*[^"]*$) 表示:匹配逗号,仅当它有零或偶数时前面的双引号的数量。

The following snippet:

$s = '1,"x1",43,"tr","y,7"';
print_r(preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $s));

produces:

Array
(
    [0] => 1
    [1] => "x1"
    [2] => 43
    [3] => "tr"
    [4] => "y,7"
)

as can be seen on ideone.

The regex ,(?=([^"]*"[^"]*")*[^"]*$) means: match a comma, only if it has zero, or an even number of double quotes ahead of it.

别在捏我脸啦 2024-10-19 11:05:27

简单的!!您的字符串是 CSV。

使用 $your_array=str_getcsv($your_string);

Easy!! Your string is a CSV.

Use $your_array=str_getcsv($your_string);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文