我有一个字符串,其中价格值($ 544.50)可以位于字符串中的任何位置。 例如:惠普G60-630US笔记本电脑:笔记本电脑| RadioShack.com - > $ 259.97(radioshack.com)从字符串中获取价格值
我需要得到的值:259.97出字符串
的为此,我试图用一些随机的正则表达式的。 但是没有运气!
有人可以帮助我,给出一个合适的正则表达式字符串从字符串中检索这个价格值。
在此先感谢。
我有一个字符串,其中价格值($ 544.50)可以位于字符串中的任何位置。 例如:惠普G60-630US笔记本电脑:笔记本电脑| RadioShack.com - > $ 259.97(radioshack.com)从字符串中获取价格值
我需要得到的值:259.97出字符串
的为此,我试图用一些随机的正则表达式的。 但是没有运气!
有人可以帮助我,给出一个合适的正则表达式字符串从字符串中检索这个价格值。
在此先感谢。
像这样的东西可能会工作:
/\$(\d*\.?\d+?)/
[$]?[0-9]*(\.)?[0-9]?[0-9]?
这应该与那些具有$
标志和那些没有。
这样的价格,它也在型号中找到了“60”和“630”。 – 2015-01-08 22:35:47
这一个发现在一个字符串第一十进制数:
^[^\d]*(\d+|\d+((,|\.)\d{1,2}))(\s|[a-zA-Z)]|€|$).*
当我测试,在给定的无线电棚架字符串,它发现不匹配。 – 2015-01-08 22:37:55
它应该在正数上工作,例如。 $ 1233.50。现在更新th正则表达式也接受负数:($ 1233.50) – besimple 2015-01-10 00:30:46
这里的更换和提取方式
提取物:
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);
可能有更好的方法来处理替换示例中的符号。
它总是以美元($)? – SERPRO 2012-01-16 11:58:22
简单正则表达式:'\ $ \ d +(\。\ d {1,2})?' – noob 2012-01-16 12:04:25
\ $ \ d +(\。\ d {1,2})?这工作!任何关于雅虎管道的想法。匹配号码后,我们只需要获取该号码。为此,我们需要在值域中给出值。任何想法? – Shirish 2012-01-16 12:19:43