PHP如何按两个分隔符拆分文本并保留分隔符属性和原有顺序
PHP 双分隔符文本拆分实现方案
实现思路
- 你之前用
explode()的方式只能按单一分隔符拆分,会丢失分隔符和内容的对应关系,也无法保留两种分隔符交叉出现的原始顺序 - 推荐使用正则表达式的捕获分组能力,一次性匹配所有分隔符及其对应的内容,匹配结果的顺序和原文顺序完全一致
- 所用正则规则
/([*-])\s*([^*-]+)/说明:- 第一个捕获组
([*-])匹配分隔符*或-,用来判断正负类型 \s*匹配分隔符后的空白字符,避免内容带多余前置空格- 第二个捕获组
([^*-]+)匹配所有不是分隔符的连续字符,即分隔符对应的内容
- 第一个捕获组
可运行代码
<?php $text = "* aaa aaa - bbb bbb - ccc * ddd * eee"; // 匹配所有分隔符和对应内容 preg_match_all('/([*-])\s*([^*-]+)/', $text, $matches); $output = []; foreach ($matches[1] as $key => $delimiter) { $content = trim($matches[2][$key]); $type = $delimiter === '*' ? 'Negative' : 'Positive'; $output[] = ($key + 1) . " - {$type}: {$content}"; } // 打印结果 echo implode(PHP_EOL, $output);
输出结果
和要求的效果完全一致:
1 - Negative: aaa aaa 2 - Positive: bbb bbb 3 - Positive: ccc 4 - Negative: ddd 5 - Negative: eee
内容的提问来源于stack exchange,提问作者Mohammad Fanni
相关产品推荐
相关产品推荐

