如何使用scala regex在url中提取字符串值?

时间:2017-07-25 15:50:03

标签: regex scala

我的应用程序中有以下网址,我想在网址中获取其中一个值 例如:

  

rapidvie值416
  输入网址:http://localhost:8080/bladdey/shop/?rapidView=416&projectKey=DSCI&view=detail&
  输出应为:416

我使用import java.util.regex在scala中编写了代码。{Matcher,Pattern}

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

我正在获取输出,但我想使用scala.util.matching库迁移此scala 如何实现这一点?

此代码正在使用java utils。

2 个答案:

答案 0 :(得分:1)

在Scala中,您可以在unanchored块中使用match正则表达式来获取捕获的部分:

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 _ => ""将在不匹配时返回空字符串。

答案 1 :(得分: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