Scala Play:从两个已知字符串之间检索动态子字符串

时间:2014-02-18 20:39:39

标签: regex scala cookies playframework

这里的Scala新手。

我正试图了解Play,以及我们如何在我们的环境中使用它。我们需要构建的应用程序的部分要求是我们点击外部Web api,它会在登录请求的标题中启动授权ID。

我正在使用WS库执行对登录服务的POST调用,并且可以使用val cookie = response.header("Set-Cookie").toString

获取标头

返回一个如下所示的字符串:

Some(JSESSIONID=1234XYZ5678ABC; Path=/some_path/; HttpOnly)

在上述字符串中检索1234XYZ5678ABC需要做什么?

2 个答案:

答案 0 :(得分:1)

  1. 阅读here
  2. 使用此RegExp:(?<=JSESSIONID=)[A-Z0-9]+(?=;)

答案 1 :(得分:0)

我不知道Play是否提供了任何方便的方法,但这里有一般的Scala方法:

scala> val sessionIdRegex = """^.*JSESSIONID=([a-zA-Z0-9]+).*$""".r
sessionIdRegex: scala.util.matching.Regex = ^.*JSESSIONID=([a-zA-Z0-9]+).*$

scala> val rawSessionData = Some("JSESSIONID=1234XYZ5678ABC; Path=/some_path/; HttpOnly") 
rawSessionData: Some[String] = Some(JSESSIONID=1234XYZ5678ABC; Path=/some_path/; HttpOnly)

scala> for {
     | sessionInfo <- rawSessionData
     | sessionIdRegex(sessionId) <- sessionIdRegex findFirstIn sessionInfo
     | } yield sessionId
res0: Option[String] = Some(1234XYZ5678ABC)

您可以在结果上使用getOrElse(<default>),如果您必须从该选项中提取一些值。相应地调整正则表达式以满足更严格的要求或提取多个组/变量。