2017-04-05 68 views
-1

正則表達式在一個CodeFight問題要求它提取字符串的第一個數字並返回一個字符串,返回null如果它不以數字開始。

我用正則表達式,沒問題,但我不很瞭解最多的回答:

String longestDigitsPrefix(String inputString) { 
    return inputString.replaceAll("^(\\d*).*","$1"); 
} 

如果有人能解釋那簡直是真棒:)

+1

你確定它應該返回'null',如果它不以數字開頭?因爲你發佈的方法在這種情況下返回空字符串'「」'。 – ruakh

+0

可能的重複[參考 - 這是什麼正則表達式?](http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean) – Tom

回答

2

正則表達式^(\\d*).*總是匹配所述整個輸入,捕捉(通過括號中)的龍頭(在^指「輸入的開始」)的數字(如果有的話 - 的*裝置0以上\d裝置「的數字」)

替換字符串$1表示「組1」(第一組由括號組成)。


實際上,給出的解決方案並不是最優雅的。這是更好/更簡單/更快/更容易閱讀:

String longestDigitsPrefix(String inputString) { 
    return inputString.replaceAll("\\D.*", ""); 
} 

此正則表達式從遇到結束的第一個非數字相匹配,只是將其刪除(有沒有替代)。

-1

是的,函數應該返回null。 非常感謝波希米亞人,實際上讓我困惑的是我認爲^(\ d *)與\ D *相同! 您的解決方案更好!一般來說,我很驚訝正則表達式的效率,但它並不是很容易掌握。