PHP如何按空格拆分字符串且保留长度大于2字符的单词组合
解决方案
问题原因
你现有代码的问题在于preg_split的分隔符规则同时匹配了空格和vitamin [cde]片段,拆分时会将vitamin d3中的d3部分从整体中剥离,无法得到预期的完整块。
正确实现
推荐使用preg_match_all直接匹配符合要求的片段,代码如下:
$str = 'test 1 vitamin d3 test 2'; // 可根据需求调整正则严格度,当前版本适配你的示例场景 preg_match_all('/(vitamin\s+\S+)|.+?(?=\s+vitamin|$)/', $str, $matches); // 去除每个片段前后空格并过滤空值 $str_parts = array_filter(array_map('trim', $matches[0])); var_export($str_parts);
输出结果
array ( 0 => 'test 1', 1 => 'vitamin d3', 2 => 'test 2', )
规则说明
(vitamin\s+\S+)负责匹配需要保留为整体的vitamin相关片段,若需要严格限制后面只能跟c/d/e加数字,可将这部分修改为(vitamin\s+[cde]\d*).+?(?=\s+vitamin|$)采用惰性匹配逻辑,匹配vitamin片段之外的内容,直到遇到下一个vitamin片段或者字符串末尾- 最后通过
trim清理前后多余空格,array_filter过滤掉空项即可得到目标数组
内容的提问来源于stack exchange,提问作者zsoro
相关产品推荐
相关产品推荐

