2015-06-24 33 views
0

我試圖想出一個正則表達式,它將匹配一個價格並涵蓋所有基數。主要問題是(潛在的)逗號和小數位。價格正則表達逗號數千個

/^[^\d]*(?<price>\d+,?\d+\.\d+)/ 

是最好的,我來了這麼遠,但它不匹配£3.00,因爲這兩個\d+ \d+可選的兩邊,我需要做左側\d+可選。

(PHP的preg_match)

我已經解釋它是如何的不同您將其標示爲重複之前。在回答完成後將其標記爲重複的點是什麼? 。

+2

十幾本網站 –

+0

愚弄它沒有像這個問題,這是非常具體如何匹配數字改爲可選。 –

+0

不要只是斷言它不是重複的 - 編輯問題來解釋*其他答案如何不能解決您的具體問題。 – jonrsharpe

回答

1

更改

\d+ 

\d* 

+裝置一次或多次出現。 *表示零或更多;或者用其他字可選。

-1

甲錢的regexp與圖案組(?<price>(\d+((\.|\,)\d+)+))

來源:

<?php 

$input_line = " 
£3.00 
£30.00 
€34.020,00 
£35,000 
£12,345,6789.100 
"; 

preg_match_all("/(?<price>(\d+((\.|\,)\d+)+))/", $input_line, $matches); 

var_dump($matches['price']); 

結果:

array(5) { 
    [0]=> 
    string(4) "3.00" 
    [1]=> 
    string(5) "30.00" 
    [2]=> 
    string(9) "34.020,00" 
    [3]=> 
    string(6) "35,000" 
    [4]=> 
    string(15) "12,345,6789.100" 
} 

闡釋爲/(?<price>(\d+((\.|\,)\d+)+))/

  • (?<price>(\d+((\.|\,)\d+)+))命名捕獲組價格

  • 第二捕獲組(\d+((\.|\,)\d+)+)

  • \d+匹配一個數字[0-9]與+爲一個和無限次之間

  • 第三捕獲組((\.|\,)\d+)+與+

  • 再次匹配

    4th捕獲組(\.|\,)

    • 1st替代:。匹配字符。從字面上
    • 第二備選:\,匹配的字符,從字面上