正則表達式在一個CodeFight問題要求它提取字符串的第一個數字並返回一個字符串,返回null如果它不以數字開始。
我用正則表達式,沒問題,但我不很瞭解最多的回答:
String longestDigitsPrefix(String inputString) {
return inputString.replaceAll("^(\\d*).*","$1");
}
如果有人能解釋那簡直是真棒:)
正則表達式在一個CodeFight問題要求它提取字符串的第一個數字並返回一個字符串,返回null如果它不以數字開始。
我用正則表達式,沒問題,但我不很瞭解最多的回答:
String longestDigitsPrefix(String inputString) {
return inputString.replaceAll("^(\\d*).*","$1");
}
如果有人能解釋那簡直是真棒:)
正則表達式^(\\d*).*
總是匹配所述整個輸入,捕捉(通過括號中)的龍頭(在^
指「輸入的開始」)的數字(如果有的話 - 的*
裝置0以上\d
裝置「的數字」)
替換字符串$1
表示「組1」(第一組由括號組成)。
實際上,給出的解決方案並不是最優雅的。這是更好/更簡單/更快/更容易閱讀:
String longestDigitsPrefix(String inputString) {
return inputString.replaceAll("\\D.*", "");
}
此正則表達式從遇到結束的第一個非數字相匹配,只是將其刪除(有沒有替代)。
是的,函數應該返回null。 非常感謝波希米亞人,實際上讓我困惑的是我認爲^(\ d *)與\ D *相同! 您的解決方案更好!一般來說,我很驚訝正則表達式的效率,但它並不是很容易掌握。
你確定它應該返回'null',如果它不以數字開頭?因爲你發佈的方法在這種情況下返回空字符串'「」'。 – ruakh
可能的重複[參考 - 這是什麼正則表達式?](http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean) – Tom