0

0

如何从PHP字符串中精准提取产品口味、数量和重量信息

聖光之護

聖光之護

发布时间:2026-01-14 10:36:10

|

345人浏览过

|

来源于php中文网

原创

如何从PHP字符串中精准提取产品口味、数量和重量信息

本文介绍使用正则表达式(preg_match_all)从非结构化商品描述中可靠提取风味(flavor)、件数(number of pieces)、净重数值(weight)及单位(g/kg)的完整php教程,适用于初学者,含可运行示例与关键细节解析。

在处理大量不规范的商品描述文本时(如“Superpremium cat food beef 42 x 85g”),手动分割或简单 strpos()/explode() 往往失效——空格、连字符、逗号、单位紧贴数字等变体极大增加了复杂度。此时,正则表达式是首选且最健壮的解决方案

以下是一个经过验证的完整示例代码,可直接运行并适配您提供的全部6种格式:

<?php
$descriptions = <<<EOD
Superpremium cat food light chicken 1 kg
Superpremium cat food light chicken 10kg
Superpremium cat food beef 2x10 kg
Superpremium cat food beef 2 x 3,8 kg
Superpremium cat food beef 2 x 2kg
Superpremium cat food beef 42 x 85g
EOD;

// 核心正则:匹配“food”后风味词 + 数字件数 + 可选“x” + 重量数值 + 单位
$pattern = '/.*food\s+([a-zA-Z\s]+?)\s+(\d+)\s*[x×]?\s*([\d,]*\.?\d*)\s*([gkGK]{1,2})/m';

preg_match_all($pattern, $descriptions, $matches, PREG_SET_ORDER);

foreach ($matches as $match) {
    // 清洗风味:去除多余空格,转小写便于统一处理
    $flavor = trim(strtolower($match[1]));

    // 件数:确保为整数(如"2"、"42")
    $pieces = (int)$match[2];

    // 重量:支持小数(如"3,8" → "3.8")和整数;若无重量值(如"1 kg"),默认为1
    $weightRaw = str_replace(',', '.', $match[3]);
    $weight = $weightRaw === '' ? 1.0 : (float)$weightRaw;

    // 单位:标准化为小写"g"或"kg"
    $unit = strtolower($match[4]);
    $unit = str_replace(['k', 'g'], '', $unit) === '' 
        ? ($unit === 'g' ? 'g' : 'kg') 
        : 'kg'; // 兜底逻辑:含"k"即视为kg

    echo "Flavor: $flavor\n";
    echo "Number of pieces: $pieces\n";
    echo "Weight: $weight\n";
    echo "Unit: $unit\n\n";
}
?>

输出示例(以最后一行为例):

Flavor: beef  
Number of pieces: 42  
Weight: 85  
Unit: g  

? 正则关键说明:

Favird No-Code Tools
Favird No-Code Tools

无代码工具的聚合器

下载

立即学习PHP免费学习笔记(深入)”;

  • .*food\s+:跳过前缀(如“Superpremium cat”),定位到 food 后至少一个空白符;
  • ([a-zA-Z\s]+?):非贪婪捕获风味名(如 beef、light chicken),支持多词与空格;
  • (\d+):捕获整数件数(42, 2);
  • [x×]?:兼容 x 或 × 符号(常见OCR/录入误差);
  • ([\d,]*\.?\d*):捕获重量数值,支持 3,8、10、85、.5 等;
  • ([gkGK]{1,2}):捕获单位(g, kg, KG, G),后续做标准化;
  • /m 修饰符:启用多行模式,使 ^/$ 匹配每行首尾(此处虽未用 ^,但增强鲁棒性)。

⚠️ 注意事项与进阶建议:

  • 风味词需预定义校验? 当前正则依赖文本位置推断风味。若风味列表固定(如 ['beef','chicken',...]),可在提取后增加白名单过滤:
    $validFlavors = ['beef', 'chicken', 'turkey', 'salmon', 'fish', 'rabbit', 'cod'];
    if (!in_array($flavor, $validFlavors)) {
        $flavor = 'unknown'; // 或跳过该条记录
    }
  • 处理无“x”的单件商品(如 1 kg)? 当前正则要求存在 x。如需兼容,可将 [x×]? 改为 (?:\s*[x×]\s*)? 并调整权重捕获组逻辑,或单独用第二条正则兜底匹配 (\d+(?:[,\.]?\d+)?)\s*([gkGK]{1,2});
  • 性能提示: 对数百条数据,preg_match_all 毫秒级完成,无需优化;若扩展至万级,建议预编译正则(preg_quote 防注入)并批量处理;
  • 编码安全: 确保输入字符串为 UTF-8;若含中文风味(如“三文鱼”),需添加 u 修饰符并使用 \p{L} 替代 [a-zA-Z]。

掌握此模式后,您不仅能解析猫粮,还可快速适配零食、日化、五金等各类商品规格文本——正则不是魔法,而是结构化思维在字符串上的落地实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

530

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

258

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

766

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

219

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

356

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

244

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

547

2023.12.06

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.4万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号