使用 PHP 从字符串中提取大小维度

Extract size dimensions from a string using PHP

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

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;
}

您可以使用

\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