2017-07-25 49 views
1

我的應用程序中有以下網址,我想在網址中使用其中一個值。
例如:如何使用scala正則表達式在url中拉取字符串值?

rapidvie值416
輸入網址:http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail&
輸出應該是:416

我一直使用進口的java.util.regex用Scala編寫的代碼{。匹配,模式}

val p: Pattern = Pattern.compile("[?&]rapidView=(\\d+)[?&]")**strong text** 
     val m:Matcher = p.matcher(url) 
     if(m.find()) 
      println(m.group(1)) 

我得到的輸出,但我想遷移使用scala.u此階直到匹配庫。
如何簡單地實現這個?

此代碼與java utils一起使用。

回答

0

我不regex,所以我會建議你用簡單的scala作用方式

scala> val url = "http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail&" 
url: String = http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail& 

scala> val value = url.split("\\?")(1).split("\\&").filter(str => str.contains("rapidView")).map(str => str.split("=")(1)) 
value: Array[String] = Array(416) 

scala> value(0) 
res0: String = 416 
1

在Scala中,你可以使用一個match塊內unanchored正則表達式得到公正的截取部分的好:

val s = "http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail&" 
val pattern ="""[?&]rapidView=(\d+)""".r.unanchored 
val res = s match { 
    case pattern(rapidView) => rapidView 
    case _ => "" 
} 
println(res) 
// => 416 

Scala demo

詳細

  • """[?&]rapidView=(\d+)""".r.unanchored - 三重引號的字符串字面允許使用單反斜線用正則表達式逃逸,並.unanchored特性使正則表達式匹配部分,而不是整個字符串
  • pattern(rapidView)得到1個或多個((\d+)捕獲)如果模式發現部分匹配
  • case _ => ""將返回一個空字符串時不匹配。
+0

非常感謝Wiktor爲您的快速repsonse – Nathon

1

您可以使用Scala做到這一點很容易:

scala> val url = "http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail&" 
url: String = http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail& 

scala> url.split("rapidView=").tail.head.split("&").head 
res0: String = 416 

您還可以擴展它的參數搜索詞:

scala> def searchParam(sp: String) = sp + "=" 
searchParam: (sp: String)String 

scala> val sw = "rapidView"                                  
sw: String = rapidView 

而剛剛與參數名稱進行搜索

scala> url.split(searchParam(sw)).tail.head.split("&").head 
res1: String = 416 

scala> val sw2 = "projectKey"                                  
sw2: String = projectKey                                   

scala> url.split(searchParam(sw2)).tail.head.split("&").head 
res2: String = DSCI 
+0

Nic即謝謝羅伯特。感謝你。 – Nathon

相關問題