为什么正则表达式找不到字符串?

时间:2014-11-12 08:18:23

标签: php regex preg-match

字符串是: Byredo Perfume Oil Roll-On Blanche 7.5ML 我想从字符串中获取 7.5

$productinfo['title'] = 'Estee Lauder Sensuous Noir EDP 50ML';
if (preg_match('/.*\s(\d+)\s?ml/', strtolower($productinfo['title'])))
{
preg_match('/.*\s(\d+)\s?ml/', strtolower($productinfo['title']), $C);
$mlsize = $C[1];
echo $mlsize;
    }

此代码效果很好。我从这段代码中得到 50 。但是当 $ productinfo ['title'] 等于此时: Byredo Perfume Oil Roll-On Blanche 7.5ML 代码无效。我想从字符串

中获取 7.5

1 个答案:

答案 0 :(得分:0)

.*\s(\d*(?:\.\d+)?)\s?ml

试试这个。看看demo。你的正则表达式不工作的原因是你捕获整数但是有.,即它是一个浮点数。要捕获浮点数,请使用这个正则表达式。

http://regex101.com/r/tF5fT5/45

$re = "".*\\s(\\d*(?:\\.\\d+)?)\\s?ml"i";
$str = "Byredo Perfume Oil Roll-On Blanche 7.5ML ";

preg_match_all($re, $str, $matches);