2010-03-12 72 views
4

我怎麼會從以下字符串RegEx - 如何提取價格?

提取金額「一些文字會顯示在這裏,越來越多的,然後會有一些價格$ 34.03,但是,這並不意味着該字符串將結束」

我想提取34.03美元...也想提取如果沒有美分

「一些文本將在這裏越來越多,然後將有一些價格34美元,但這並不意味着字符串將結束」我想提取$ 34

回答

17

我不是正則表達大師,但能夠用RegExr鞭打以下內容。

/(\$[0-9]+(\.[0-9]{2})?)/ 

匹配$35.03$35。要接受的格式,如$35,000.52你需要包括,

/(\$[0-9,]+(\.[0-9]{2})?)/ 

這可能會對其進行改進,而是從我的初步測試,它工作得很好。

+0

有時有'$'和'\ D'之間的空間(S)。所以'(\ $ \ s?[0-9,] +(\。[0-9] {2})?)'適合我。 – 3zzy 2016-10-21 13:18:35

2
'/\$\d+(?:\.\d+)?/' 

if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){ 
    echo $matches[0]; //which would be $34 or $34.03 
} 
1

既然你不提具體的正則表達式引擎,你可能需要調整這一點:

/(\$\d+(\.\d+)?)/ 
1

什麼這個正則表達式:\$[0-9.,]+\$([0-9.,]+)剝除$

這很簡單,但它幾乎可以滿足你的要求,它甚至可以捕獲像這樣的東西:$1,450.8934$14.343

當然,它的缺點是它也會捕獲$34.54.23

或者如果您只想捕獲兩位小數:\$[0-9,]+\.[0-9]{2}它會捕獲$5.234565$5.23部分。

您可以與preg_matchpreg_match_all一起使用。

1

我目前的一個小功能工作使用正則表達式來獲得一個字符串中的價格量:

private static String getPrice(String input) 
{ 
    String output = ""; 

    Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?"); 
    Matcher matcher = pattern.matcher(input); 
    if (matcher.find()) 
    { 
     output = matcher.group(0); 
    } 

    return output; 
} 

這似乎與小的代價(0,00到999,99)和各種貨幣工作:

$ 12.34 - > 12.34

$ 12,34 - > 12,34

$ 12.00 - > 12.00

$ 12 - > 12

12€ - > 12

12,11€ - > 12,11

12.999€ - > 12。99

12.9€ - > 12.9

£999.99€ - > 999.99

...