我的应用程序中有以下网址,我想在网址中获取其中一个值 例如:
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。
答案 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