RegEx - 如何提取价格?

时间:2010-03-12 05:31:57

标签: php regex

如何从以下字符串

中提取美元金额

“有些文字会越来越多,然后会有一些价格34.03美元,但这并不意味着字符串会结束”

我想提取34.03美元...如果没有美分也想提取

“有些文字会在这里越来越多,然后会有一些价格34美元,但这并不意味着字符串会结束”

这里我要提取34美元

5 个答案:

答案 0 :(得分:18)

我不是正则表达式大师,但能够用RegExr掀起以下内容。

/(\$[0-9]+(\.[0-9]{2})?)/

匹配$35.03$35。要接受$35,000.52等格式,您需要包含,

/(\$[0-9,]+(\.[0-9]{2})?)/

这可能会有所改善,但从我的初步测试来看,它运作得很好。

答案 1 :(得分:2)

'/\$\d+(?:\.\d+)?/'

if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){
    echo $matches[0]; //which would be $34 or $34.03
}

答案 2 :(得分:1)

由于您没有提及特定的正则表达式引擎,您可能需要稍微调整一下:

/(\$\d+(\.\d+)?)/

答案 3 :(得分:1)

此正则表达式如何:\$[0-9.,]+\$([0-9.,]+)剥离$

这很简单,但它几乎可以满足您的需求,甚至可以捕获这样的内容:$1,450.8934$14.343

当然它的缺点是它也会抓住$34.54.23

或者,如果您只想捕获两位小数:\$[0-9,]+\.[0-9]{2}它会捕获$5.23的{​​{1}}部分。

您可以将其与$5.234565preg_match一起使用。

答案 4 :(得分:1)

我目前正在开发一个使用正则表达式的小函数来获取字符串中的价格数量:

private static String getPrice(String input)
{
    String output = "";

    Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?");
    Matcher matcher = pattern.matcher(input);
    if (matcher.find())
    {
        output = matcher.group(0);
    }

    return output;
}

这似乎适用于小价格(0,00至999,99)和各种货币:

$ 12.34 - > 12.34

$ 12,34 - > 12,34

$ 12.00 - > 12.00

$ 12 - > 12

12€ - > 12

12,11€ - > 12,11

12.999€ - > 12.99

12.9€ - > 12.9

£999.99€ - > 999.99

...