2012-01-16 117 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); 

可能有更好的方法來處理替換示例中的符號。