关于字符串按照多个关键词分组并保留关键词的问题

我想把”酒驾属于违法行为吗?”按照”酒驾”、”违法行为”分组为

[
    "酒驾",
    "属于",
    "违法行为",
    "吗?"
]

有没有比较好的方法, 比如正则

php
让PHP再次伟大
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

试试看:

$rs = preg_split('/(按照|酒驾|违法行为)/','酒驾属于违法行为吗?',-1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
2年前 评论
讨论数量: 4
2年前 评论
勇敢的心 (楼主) 2年前

你既然强制规定了规则,拆分后自由组装呗,就怕你这是个例子,最终还是要根据语义拆分,遍历关键词,然后拆分语句

        $list = ['酒驾属于违法行为吗?'];
        $current = [];
        foreach(['酒驾', '违法行为'] as $key){
            foreach($list as $val){
                if(strpos($val, $key) !== false){
                    if(array_search($val, $current) !== false){
                        unset($current[array_search($val, $current)]);
                    }
                    $current = array_merge($current, [$key],explode($key, $val));
                }
            }
            $list = $current;
        }

        dump(array_filter($current));

你自己优化吧

2年前 评论

试试看:

$rs = preg_split('/(按照|酒驾|违法行为)/','酒驾属于违法行为吗?',-1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
2年前 评论

你一定是遇到了一个业余的产品经理

2年前 评论
勇敢的心 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!