从字符串中获取价格值

时间:2012-01-16 11:56:44

标签: regex string currency yahoo-pipes

我有一个字符串,价格值($ 544.50)可以在字符串中的任何位置。 例如:HP G60-630US笔记本电脑:笔记本电脑| RadioShack.com - > $ 259.97(radioshack.com)

我需要从字符串中获取值:259.97

为此我尝试使用一些随机正则表达式。 但没有运气!

有人可以帮助我,给出一个正确的正则表达式字符串,用于从字符串中检索此价格值。

提前致谢。

7 个答案:

答案 0 :(得分:11)

此正则表达式适用于多种货币:$£€

[\$\£\€](\d+(?:\.\d{1,2})?)

Example

答案 1 :(得分:1)

[$]?[0-9]*(\.)?[0-9]?[0-9]?

这应该与$符号和没有符号的符号相匹配。

答案 2 :(得分:0)

这样的事可能会奏效:

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

答案 3 :(得分:0)

\ $(\ d * \。?\ d *)应该有效,不是最佳但可能有用。

(重要:逃避$和。,这是特殊字符)

答案 4 :(得分:0)

这个在字符串中找到第一个十进制数字:

^[^\d]*(\d+|\d+((,|\.)\d{1,2}))(\s|[a-zA-Z)]|€|$).*
  • 仅查找小数点后0-2或逗号允许的数字
  • 在数字
  • 之前或之后不需要空格
  • 数字不得以任何分隔符结束(例如12.12。或12!不返回)
  • 号码可以以欧元符号结束
  • 适用于美国负数($ 1233.50)

答案 5 :(得分:0)

这是一种替换和提取的方法

摘录:

preg_match('/\$([0-9]+[\.]*[0-9]*)/',$string,$matches);
foreach($matches as $match) {
  echo $match."<br>";
}
//echo $matches[0]; for just the first match

<强>修改/替换:

$string = preg_replace_callback('/\$([0-9]+[\.]*[0-9]*)/', function ($matches) {


            foreach ($matches as $match) {
                // only if value is !empty and higher than 0
                $tmp = str_replace("$", "", $match);
                if ($tmp > 0 && $tmp != "") {
                    //do something to $tmp in this case round to two decimal places
                    return "$" . round($tmp,2);

                }

            }

        }, $string);

在替换示例中,可能有更好的方法来处理符号。

答案 6 :(得分:0)

正则表达式过滤掉数字: 字符串正则表达式=([0-9] + [,。]?)+ 您可以像这样使用它:

CurrencySymbol +正则表达式 正则表达式+ CurrencySymbol