解析各种格式的价格形成一个字符串

时间:2014-11-20 02:44:48

标签: php regex

我试图用字符串解析价格,但价格有很多不同的格式,我试图尽可能地捕获..这里是我的代码:

$pattern = '#([Ii][Dd][Rr].?\s*[0-9.,]+)|([Rr][Pp].?\s*[0-9.,]+)|(\s[0-9]+\s?[Kk]\s)|([0-9]+[Rr][Bb])|([0-9.,]+\s*[Rr][Ii][Bb][Uu])|(\b[0-9]+[.,][0-9]+[.,]?[0-9]+)#u';

        if (!$this->price)
        {
            $matches = array();
            preg_match($pattern, $caption, $matches);
            if (isset($matches[0]))
            {           

                $price = $matches[0];   
                $price = preg_replace("#[K|k]|[R|r][B|b]#", "000", $price); 
                $price = preg_replace("#[^0-9]#", "", $price); 

                if (strlen($price) > 7)
                {
                    return false;
                }
                $price = floatval($price);  

                if ($price < 1000)
                {
                    $price *= 1000;
                }

                $this->price = $price; 

                //Remove finded price
                $this->caption = preg_replace($pattern, '', $caption, 1);
                $result = true;
            } 
        } 

这是价格字符串:

Peacock long blouse Bahan combat, fit to XXL, pj77cm, Ld120cm, berat 0,21kg, Hitam, body pjg, ukuran besar 71.000 (blm + ongkir)// stock terbatas sistaa...... 

但是这会使我返回21.000因为它将0.21kg的字符串解析为价格。如何避免0或0.作为模式中的价格检测?

1 个答案:

答案 0 :(得分:0)

([Ii][Dd][Rr].?\s*[0-9.,]+)|([Rr][Pp].?\s*[0-9.,]+)|(\s[0-9]+\s?[Kk]\s)|([0-9]+[Rr][Bb])|([0-9.,]+\s*[Rr][Ii][Bb][Uu])|(\b[1-9]+[.,][0-9]+[.,]?[0-9]+)

试试这个。查看演示。,21kg正在使用正则表达式6th的{​​{1}}组抓取。(\b[0-9]+[.,][0-9]+[.,]?[0-9]+)将其更改为(\b[1-9]+[.,][0-9]+[.,]?[0-9]+)以排除0,0.

http://regex101.com/r/lZ5mN8/36