【问题标题】:Extract size dimensions from a string using PHP使用 PHP 从字符串中提取大小尺寸
【发布时间】:2021-11-02 14:42:45
【问题描述】:

谁能帮我从类似于这些字符串的字符串中提取维度

Extending Garden Table 100 x 200 x 300 cm white
Extending Garden Table 200 x 200 cm black
Extending Garden Table 200 cm black Large

我只需要输出 100 x 200 x 300 cm200 x 200 cm200 cm,根据字符串包含的内容

我从下面的代码开始,以防它可以帮助一点

$string1 = "Extending Garden Table 100 x 200 x 300 cm white"; 
$test    = get_dimensions($string1);  //need it to output 100 x 200 x 300 cm


function get_dimensions($str) {
    preg_match_all('/[0-9]{1,2}\X[0-9]{1,2}/i', $str, $matches);
    //preg_match_all('!\d+!', $str, $matches);
    return $matches;
}

【问题讨论】:

  • 最后一个维度值后面总是有cm字吗?
  • 并非总是如此。我刚刚创建了一个函数来输入变量为“cm”“m”“L”“kg”等。如果您知道这些“允许”单位是否可以从正则表达式中实现,那就太好了!
  • 是的,请参阅this PHP demo
  • @WiktorStribiżew 非常感谢你太棒了我很感激

标签: php regex preg-match preg-match-all


【解决方案1】:

你可以使用

\d+(?:\s*x\s*\d+)*\s*cm\b

请参阅regex demo详情

  • \d+ - 一位或多位数字
  • (?:\s*x\s*\d+)* - 零个或多个序列:
    • \s*x\s* - x 用零个或多个空格括起来
    • \d+ - 一位或多位数字
  • \s* - 零个或多个空格
  • cm - 一个cm
  • \b - 单词边界

PHP demo

function get_dimensions($str) {
    preg_match_all('/\d+(?:\s*x\s*\d+)*\s*cm\b/i', $str, $matches);
    return $matches[0];
}
$string1 = "Extending Garden Table 100 x 200 x 300 cm white"; 
$test    = get_dimensions($string1);  //need it to output 100 x 200 x 300 cm
print_r($test);
// => Array ( [0] => 100 x 200 x 300 cm )

要提取带有小数部分的数字,请在上述模式中的每个 \d+ 之后添加 (?:[,.]\d+)?(可选出现逗号或点,然后是一个或多个数字):

\d+(?:[,.]\d+)?(?:\s*x\s*\d+(?:[,.]\d+)?)*\s*cm\b

this regex demo

【讨论】:

  • 非常感谢您的帮助,这正是我所需要的,您是否也有办法处理一些小数?像 1.3 x 2.5 x 3.5 m
  • @inventor 是的,\d+(?:[,.]\d+)?(?:\s*x\s*\d+(?:[,.]\d+)?)*\s*cm\b
猜你喜欢
  • 2012-09-22
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2017-04-01
  • 2016-06-15
  • 2011-04-22
相关资源
最近更新 更多