我试图用字符串解析价格,但价格有很多不同的格式,我试图尽可能地捕获..这里是我的代码:
$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.作为模式中的价格检测?
答案 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.
。