Regex 从字符串中获取价格值

Regex 从字符串中获取价格值,regex,string,currency,yahoo-pipes,Regex,String,Currency,Yahoo Pipes,我有一个字符串,其中price value($544.50)可以是字符串中的任意位置。 例如:HP G60-630US笔记本电脑:笔记本电脑| RadioShack.com-->259.97美元(RadioShack.com) 我需要从字符串中获取值:259.97 为此,我尝试使用一些随机正则表达式。 但是没有运气 有人能帮我,给一个合适的正则表达式字符串从字符串中检索这个价格值 提前感谢。类似的方法可能会奏效: /\$(\d*\.?\d+?)/ \$(\d*\。?\d*)应该可以工作,不是最

我有一个字符串,其中price value($544.50)可以是字符串中的任意位置。 例如:HP G60-630US笔记本电脑:笔记本电脑| RadioShack.com-->259.97美元(RadioShack.com)

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

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

有人能帮我,给一个合适的正则表达式字符串从字符串中检索这个价格值


提前感谢。

类似的方法可能会奏效:

/\$(\d*\.?\d+?)/
\$(\d*\。?\d*)应该可以工作,不是最佳的,但可能有用

(重要提示:转义$和.,它们是特殊字符)

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


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

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

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

此项查找字符串中的第一个十进制数:

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

    • 这里有一种替换和提取的方法

      摘录:

      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);
      

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

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

      货币符号+正则表达式
      正则表达式+货币符号

      是否总是以美元($)表示?简单正则表达式:
      \$\d+(\.\d{1,2})?
      \$\d+(\.\d{1,2})?这管用!关于雅虎管道的任何想法。匹配号码后,我们只需要得到该号码。为此,我们需要在值字段中给出一个值。有什么想法吗?这也会匹配这样的东西:
      300美元,是的。但即使没有这个,我也看不出你的字符串会如何匹配?d匹配一个数字。任何东西(最多一次除外)。我使用*而不是+来考虑价格,比如.50美元[\$\\\€](\d+(?:\。\d{1,2})?这是有效的!还有一个蹩脚的问题。在Yahoo pipes中,使用regex模块,匹配后我们需要在value字段中给出一个值。所以我只能从完整的字符串中得到数字。你能帮忙吗?号码在正则表达式的第一个匹配项中。通常匹配[0]是完整的字符串,匹配[1]是您要查找的数字。我不知道雅虎管道。但是你能选择你想要使用的匹配项吗?这也会在型号中找到“60”和“630”。当我测试时,在给定的radio shack字符串上,它不会找到匹配项。它应该适用于正数,例如$1233.50。现在已经更新了th regex以接受负数:($1233.50)