我已經在與模式匹配的正則表達式:斯卡拉:正則表達式直接模式匹配塊
val url = "/en/about"
val langRegex = "/(.{2}).*".r
val lang = url match {
case langRegex(lang) => lang
case _ => "en"
}
但我想實現這樣的事情(我不想創建正則表達式額外的變量,而是把它直接在匹配塊)
val url = "/en/about"
val lang = url match {
case "/(.{2}).*".r(lang) => lang
case _ => "en"
}
我在第二種情況下收到編譯器錯誤?我只是用langRegex(lang)與「/(.{2}).*".r,這些表達應該是相等的,不應該嗎?
爲什麼這是一個錯誤?
問題是你不能這樣做,你需要一個預編譯模式。你可以做的就是在裏面使用'if',如果字符串匹配你的正則表達式就使用一些字符串操作,或者只是使用一個簡單的代碼,如http://ideone.com/CJMS1A –
或者使用['case s if url .matches(「/(。{2})。*」)=> s.replaceFirst(「/(.{2}).*」,「$ 1」)'](http://ideone.com/dqlW4z) 。 –