2012-01-16 131 views
2

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

我需要得到的值:259.97出字符串

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

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

在此先感谢。

+1

它总是以美元($)? – SERPRO 2012-01-16 11:58:22

+1

简单正则表达式:'\ $ \ d +(\。\ d {1,2})?' – noob 2012-01-16 12:04:25

+0

\ $ \ d +(\。\ d {1,2})?这工作!任何关于雅虎管道的想法。匹配号码后,我们只需要获取该号码。为此,我们需要在值域中给出值。任何想法? – Shirish 2012-01-16 12:19:43

回答

0

像这样的东西可能会工作:

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

\ $(\ d * \ \ d *?)应该工作,不是最优的,但可能是有用的。

(重要提示:逃生$和,这是特殊字符)

+0

这也会匹配这样的东西:'$ 300 rfersijfurhfurnfuerfnurjfrifnrunfurfrfurhufrhfhr 4594545' – noob 2012-01-16 12:14:57

+0

@micha:我忘了逃避,是的。但即使没有,我不明白你的字符串将如何匹配? d匹配一个数字,。任何东西(但一旦最大)。我使用*而不是+来允许诸如$ .50 – Rumpel 2012-01-16 12:44:00

1

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

这应该与那些具有$标志和那些没有。

+0

这样的价格,它也在型号中找到了“60”和“630”。 – 2015-01-08 22:35:47

11

此正则表达式将多币种的工作:$£€

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

Example

+0

[\ $ \£\](\ d +(?:\。\ d {1,2})?) 它的工作!还有一个蹩脚的问题。在雅虎管道中,使用正则表达式模块,匹配后我们需要在值字段中给出一个值。所以我只能从完整的字符串中获取数字。你能帮忙吗? – Shirish 2012-01-16 12:25:01

+0

该数字在正则表达式的第一个匹配项中。通常匹配[0]是完整的字符串,匹配[1]是您正在查找的数字。我不知道雅虎管道。但是你可以选择你想使用的比赛吗? – SERPRO 2012-01-16 12:45:20

0

这一个发现在一个字符串第一十进制数:

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

当我测试,在给定的无线电棚架字符串,它发现不匹配。 – 2015-01-08 22:37:55

+0

它应该在正数上工作,例如。 $ 1233.50。现在更新th正则表达式也接受负数:($ 1233.50) – besimple 2015-01-10 00:30:46

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

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