使用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
相关产品推荐
相关产品推荐

