You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定关键词分割含多属性的汽车信息字符串?

解决按关键词数组分割汽车信息字符串的问题

问题分析

原来的preg_split只能处理固定顺序的两个关键词(MODEL、ENGINE),但实际场景中存在多个可选关键词(POWER、TORQUE、GEAR、DRIVE、YEAR、NOTE),这些字段出现顺序不确定,需要实现按数组中的关键词分割字符串并保留关键词,最终把字符串解析为结构化的汽车属性数组。

解决方案

核心思路:

  • 定义包含必选和可选字段的关键词集合
  • 构建动态正则表达式,匹配所有关键词作为分割边界并保留关键词
  • 整理分割后的数组,将关键词与对应值配对,特殊处理含空格内容的NOTE字段

完整代码实现

<?php
// 定义所有关键词(必选+可选)
$keywords = ['MODEL', 'ENGINE', 'POWER', 'TORQUE', 'GEAR', 'DRIVE', 'YEAR', 'NOTE'];

// 构建正则匹配规则:匹配独立关键词(前后带空格),并捕获关键词
$pattern = '/\s(' . implode('|', $keywords) . ')\s/';

// 测试用例集合
$testStrings = [
    'Audi MODEL 80 ENGINE 1.9 TDi POWER 90Hk TORQUE 202Nm GEAR man DRIVE 2wd YEAR 1996',
    'Audi MODEL 80 ENGINE 1.9 TDi YEAR 1996 NOTE this engine needs custom stage GEAR auto',
    'Audi MODEL 80 ENGINE 1.9 TDi GEAR man YEAR 1996',
    'Audi MODEL 80 ENGINE 1.9 TDi YEAR 1996 DRIVE 2wd'
];

foreach ($testStrings as $string) {
    // 分割字符串,保留关键词(捕获分割符+过滤空元素)
    $parts = preg_split($pattern, $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
    
    // 初始化结果数组,提取首个元素作为MAKE值
    $carInfo = ['MAKE' => trim(array_shift($parts))];
    
    // 遍历分割后的数组,按「关键词+值」配对
    for ($i = 0; $i < count($parts); $i += 2) {
        $key = $parts[$i];
        // NOTE字段特殊处理:合并后续所有内容作为值
        if ($key === 'NOTE') {
            $value = trim(implode(' ', array_slice($parts, $i + 1)));
            break;
        }
        $value = trim($parts[$i + 1] ?? '');
        $carInfo[$key] = $value;
    }
    
    // 输出结果
    echo "原始字符串:$string\n";
    print_r($carInfo);
    echo "-------------------------\n";
}
?>

代码关键点说明

  1. 正则表达式构建:

    • 通过implode('|', $keywords)将关键词数组转为正则或匹配模式
    • 用\s包裹关键词,确保匹配独立的关键词(避免误匹配包含关键词的其他字符串)
    • 括号()捕获关键词,配合PREG_SPLIT_DELIM_CAPTURE参数保留分割用的关键词
  2. 数组处理逻辑:

    • 第一个元素直接作为MAKE的值
    • 后续元素按「关键词+值」成对遍历,存入结果数组
    • 针对NOTE字段做特殊处理:合并当前位置之后的所有元素作为值,避免被后续关键词分割
  3. 参数作用:

    • PREG_SPLIT_DELIM_CAPTURE:捕获正则分组(即关键词)作为分割结果的一部分
    • PREG_SPLIT_NO_EMPTY:过滤分割产生的空字符串

输出示例(节选)

第二个测试字符串的输出结果:

原始字符串:Audi MODEL 80 ENGINE 1.9 TDi YEAR 1996 NOTE this engine needs custom stage GEAR auto
Array
(
    [MAKE] => Audi
    [MODEL] => 80
    [ENGINE] => 1.9 TDi
    [YEAR] => 1996
    [NOTE] => this engine needs custom stage GEAR auto
)
-------------------------

内容的提问来源于stack exchange,提问作者ThomasK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:15:59