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

使用PHP preg_match提取三维尺寸值的正则表达式问题求助

分析你的正则表达式问题并修正提取三维尺寸的方案

咱们来一步步拆解你当前正则的问题,然后给出能准确匹配目标尺寸的方案:

现有正则的核心问题

你的目标是提取类似 7.30 x 7.00 x 4.87 mm 的格式,但当前正则 @([0-9\.]+) - ([0-9\.]+) mm x ([0-9\.]+) mm@ 存在几个致命的不匹配点:

  • 分隔符错误:你要匹配的是用 x 分隔的三个数值,但正则里写了 -(连字符),这会让它只能匹配类似 1.2 - 3.4 mm x 5.6 mm 的字符串,完全不符合你的目标格式。
  • 单位位置错误:目标格式里只有最后才统一带 mm 单位,但你的正则要求前两个数值后面必须跟着 mm,和示例里的结构完全相反。
  • 数值匹配不够严谨:[0-9\.]+ 会匹配像 ... 或 123. 这种无效数值,无法精准识别合法的整数或小数。

修正后的正则方案

根据你的需求,我整理了两个版本的正则,分别对应不同的场景:

1. 精准匹配带两位小数的格式

如果你的尺寸都是类似 7.30 x 7.00 x 4.87 mm 这种固定两位小数的格式,可以用这个严格匹配的正则:

$pattern = '@(\d+\.\d+) x (\d+\.\d+) x (\d+\.\d+) mm@';

2. 灵活匹配任意整数/小数格式

如果需要支持整数(比如 7 x 8 x 9 mm)或任意位数的小数(比如 7.3 x 7.0 x 4.875 mm),同时兼容数值与 x 之间的空格不规范情况,用这个更灵活的版本:

$pattern = '@(\d+(?:\.\d+)?)\\s*x\\s*(\d+(?:\.\d+)?)\\s*x\\s*(\d+(?:\.\d+)?)\\s*mm@';

这里的 \s* 表示匹配0个或多个空格,能兼容 7.30x7.00 x4.87 mm 这类空格不一致的情况。

PHP 示例代码

下面是一个完整的使用示例,帮你快速验证效果:

$sampleText = "This product has dimensions 7.30 x 7.00 x 4.87 mm, ideal for storage.";
$pattern = '@(\d+(?:\.\d+)?)\\s*x\\s*(\d+(?:\.\d+)?)\\s*x\\s*(\d+(?:\.\d+)?)\\s*mm@';

if (preg_match($pattern, $sampleText, $matches)) {
    // $matches[0] 是整个匹配的字符串,$matches[1]-$matches[3] 分别对应三个尺寸数值
    printf("提取到的三维尺寸:\n长度:%s\n宽度:%s\n高度:%s\n", $matches[1], $matches[2], $matches[3]);
} else {
    echo "未找到符合格式的三维尺寸。";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:39:58