我有一個字符串,其中價格值($ 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