需要在scala中使用正则表达式

时间:2015-08-04 13:50:26

标签: regex scala

这是我的回复

   scala > val a= """{"string":"{\"data\":{\"id\":\"2c91809f4ef7678b014ef86ee28511c2\",\"unitName\":\"gatlir1\",\"owner\":\"gatlir1\",\"description\":\"gatlir1\",\"nofChairs\":0,\"nofBeds\":0,\"nofApptStartWithInHour\":0,\"nofApptDischargeWithInHour\":0,\"modifiedDateTime\":\"Aug 4, 2015 4:18:13 AM\"},\"status\":\"SUCCESS\",\"message\":\"unit_save\"}"}"""

我需要在scala中从该响应中获取id值。我已将响应存储在一个变量中。我已经为它写了正则表达式并存储在另一个变量中。

这是问题,我收到错误。 正则表达式:

     scala> val b= """{\"id\":\"(\w+)\""""

将正则表达式插入“b”时,我没有收到任何错误,但在比较时我收到错误

如果我写这样的表达

          scala> a.matches(b) 

错误:

  java.util.regex.PatternSyntaxException: Illegal repetition
   {\"id\":\"(\w+)\"
   at java.util.regex.Pattern.error(Pattern.java:1955)
   at java.util.regex.Pattern.closure(Pattern.java:3157)
   at java.util.regex.Pattern.sequence(Pattern.java:2134)
   at java.util.regex.Pattern.expr(Pattern.java:1996)
   at java.util.regex.Pattern.compile(Pattern.java:1696)
   at java.util.regex.Pattern.<init>(Pattern.java:1351)
   at java.util.regex.Pattern.compile(Pattern.java:1028)
   at java.util.regex.Pattern.matches(Pattern.java:1133)
   at java.lang.String.matches(String.java:2109)

任何人都可以帮助我..

3 个答案:

答案 0 :(得分:6)

为什么在这里使用正则表达式?只需阅读JSON。 JSON不是常规语言,使用正则表达式无法轻松描述。

以下是为Scala解析JSON的许多库中的一个https://github.com/json4s/json4s

它还可以更容易地访问内部的任何其他对象。

答案 1 :(得分:1)

你应该逃避{

val b= """\{\"id\":\"(\w+)\""""

答案 2 :(得分:1)

这是固定代码:

val a= """{"string":"{"data":{"id":"2c91809f4ef7678b014ef86ee28511c2","unitName":"gatlir1","owner":"gatlir1","description":"gatlir1","nofChairs":0,"nofBeds":0,"nofApptStartWithInHour":0,"nofApptDischargeWithInHour":0,"modifiedDateTime":"Aug 4, 2015 4:18:13 AM"},"status":"SUCCESS","message":"unit_save"}"}"""
val b= """\{"id":"(\w+)""".r
val allMatches = b.findAllMatchIn(a)
allMatches.foreach { m =>
     println(m.group(1))
}

打印:2c91809f4ef7678b014ef86ee28511c2

请参阅demo

请注意,您不必在"""引用的字符串中转义双引号(请参阅this SO answer)。