【问题标题】:explode commas but ignore commas within brackets php爆炸逗号但忽略括号内的逗号php
【发布时间】:2020-02-21 10:44:17
【问题描述】:

我已经完成了很多答案,但没有给我想要的答案。

我要爆炸“啤酒 - 国产、食品 - 零食(薯片、蘸酱、坚果)、啤酒 - 进口、未分类”,结果应该是这样的

Array
(
    [0] => Beer - Domestic
    [1] => Food - Snacks (chips,dips,nuts)
    [2] => Beer - Imported,
    [3] => UNCATEGORIZED
)

这是我尝试过的

$string = "Beer - Domestic,Food - Snacks (chips,dips,nuts),Beer - Imported,UNCATEGORIZED";
$keywords = preg_split("/(?<=\)),/", $string);

$keywords = preg_split("/[\s,]+/", $string);

preg_match_all(' /[^(,]*(?:([^)]+))?[^),]*/', $string, $matches);

preg_match_all('/[^(,\s]+|\([^)]+\)/', $string, $matches);

这给了我以下结果

    Array
(
    [0] => Beer - Domestic,Food - Snacks (chips,dips,nuts)
    [1] => Beer - Imported,UNCATEGORIZED
)

我想要做的就是将不在括号内的 ',' 分解掉

【问题讨论】:

    标签: php regex explode


    【解决方案1】:

    我们可以使用以下模式对您当前的正则表达式拆分逻辑进行轻微修正:

    ,(?![^(]+\))
    

    这表示以逗号分隔,但如果该逗号未出现在括号中的术语内。它通过使用负前瞻检查我们没有看到) 而不首先看到开头的( 来工作,这意味着逗号在(...) 术语内。

    $string = "Beer - Domestic,Food - Snacks (chips,dips,nuts),Beer - Imported,UNCATEGORIZED";
    $keywords = preg_split("/,(?![^(]+\))/", $string);
    print_r($keywords);
    

    打印出来:

    Array
    (
        [0] => Beer - Domestic
        [1] => Food - Snacks (chips,dips,nuts)
        [2] => Beer - Imported
        [3] => UNCATEGORIZED
    )
    

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 2019-08-31
      • 2017-04-07
      • 2018-04-14
      • 1970-01-01
      • 2021-12-01
      • 2011-12-25
      • 2020-04-05
      相关资源
      最近更新 更多