正则表达式获取数字后的数字和字符串

时间:2015-03-11 11:50:10

标签: php regex

我需要从两个不同的字符串中提取数字后面的数字和单位..某些字符串在数字和单位之间有空格,如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 ?

    }

你能帮忙吗?

2 个答案:

答案 0 :(得分:4)

您可以使用:

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

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

RegEx Demo

答案 1 :(得分:2)

这应该适合你:

preg_match_all('!(\d+\s?\S+)!', $text, $matches);
  • \ d + 匹配数字[0-9]
    • 量词: + 在一次和无限次之间
  • \ s?匹配任何空格字符[\ r \ n \ t \ f]
    • 量词:在零到一次之间
  • \ S + 匹配任何非空格字符[^ \ r \ n \ t \ f]
    • 量词: + 在一次和无限次之间