从较大的字符串中获取数字及其尾随文本(公制单位)

问题描述 投票:0回答:2

我需要从两个不同的字符串中提取数字和数字后面的单位。有些字符串在数字和单位之间有空格,就像这样

150 g 
而其他则没有
150g

$text = 'Rexona Ap Deo Aerosol 150ml Active CPD-05923';
$text = 'Cutex Nail Polish Remover Moisture 100ml ';

preg_match_all('!\d+!', $text, $matches);
if (sizeof($matches[0]) > 1) {
    // how can I extract 'ml'
} else {
    // how can I extract 150 ml ?
}
php regex text-extraction
2个回答
4
投票

您可以使用:

preg_match_all('~\b(\d+(?:\.\d{1,2})?)\s*(ml|gm?|kg|cm)\b~i', $text, $matches);

并使用匹配的组#1和#2。

正则表达式演示


2
投票

这应该适合你:

preg_match_all('!(\d+\s?\S+)!', $text, $matches);
  • \d+ 匹配数字 [0-9]
    • 量词:+ 一次到无限次之间
  • \s? 匹配任何空白字符 [ ]
    • 量词: 零到一次之间
  • \S+ 匹配任何非空白字符 [^ ]
    • 量词:+ 一次到无限次之间
© www.soinside.com 2019 - 2024. All rights reserved.