duangan7834 2015-02-17 13:20
浏览 92
已采纳

除了括号中显示的逗号外,如何分割逗号?

I want to split like this:

Before:

TEST_A, TEST_B, TEST_C (with A, B, C), TEST_D

After:

TEST_A
TEST_B
TEST_C (with A, B, C)
TEST_D

How can I split it?

  • 写回答

4条回答 默认 最新

  • dti70601 2015-02-17 13:27
    关注

    Regex isn’t going to help this time, so you will have to iterate through the characters.

    Fact is, regular expressions aren’t very context-aware. For that reason, you can’t use regular expression to parse HTML. This is why we’re better off iterating through the string ourselves.

    function magic_split($str) {
        $sets = array('');  // Sets of strings
        $set_index = 0;     // Remember what index we’re writing to
        $brackets_depth = 0; // Keep track if we’re in brackets (or not)
    
        // Iterate through entire string
        for($i = 0; $i < strlen($str); $i++) {
            // Skip commas if we’re not in brackets
            if($brackets_depth < 1 && $str[$i] === ',') continue;
    
            // Add character to current list
            $sets[$set_index] .= $str[$i];
    
            // Store brackets depth
            if($str[$i] === '(') $brackets_depth++;
            if($str[$i] === ')') $brackets_depth--;
    
            if(
                $i < strlen($str) - 1 && // Is a next char available?
                $str[$i+1] === ',' &&   // Is it a comma?
                $brackets_depth === 0   // Are we not in brackets?
            ) $sets[++$set_index] = '';  // Add new set
        }
    
        return $sets;
    }
    
    $input = 'TEST_A, TEST_B, TEST_C (with A, B, C), TEST_D';
    $split = magic_split($input);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。