2015-08-04 6 views
1

Это мой ответнужно регулярное выражение в Скале

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\"}"}""" 

я нужно получить значение идентификатора из этого ответа в Скале. Я сохранил ответ в одной переменной. и я написал для этого регулярное выражение и сохранен в другой переменной.

В этом случае проблема возникает. RegEx:

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

при вставке регулярного выражения в "Ъ", я не получил какую-либо ошибки, но при сравнении я получаю ошибку

, если я пишу выражение как этого

  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) 

может ли один помочь мне в этом ..

+0

'matches()' требует полного совпадения строк. Вам нужно избегать '{' правильно и добавить '. *' В конце шаблона. –

+0

"" "\" id \ ": \" (\ w +) \. * "" "" Вот так .. –

ответ

1

Вы должны избежать {:

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

Спасибо за ответ. я удалил {, теперь я получаю ответ как «Boolean = false», мне нужно получить правду. что я могу там изменить? –

+1

@ RaviVaranasi при работе с JSON, regex нехорошо обычно. Выберите библиотеку, которая анализирует JSON и будет работать с ней. Если вы все еще хотите использовать регулярные выражения, вы должны использовать 'find' вместо этого. – Maroun

+0

im, используя это выражение в моем коде .check (regex (("" "\" id \ ": \" (\ w +) \ "" "")). Find.exists.saveAs ("id")) –

6

Почему вы с помощью регулярных выражений здесь? Просто прочитайте JSON. JSON не является обычным языком и не может быть легко описана с помощью регулярного выражения.

Вот один из многих библиотеки, которая будет анализировать JSON для Scala https://github.com/json4s/json4s

Это также сделает доступ к любым другим объектам внутри гораздо проще.

+0

Фактически , этот id является dymanic значением, мне нужно использовать это значение в следующем запросе, поэтому с помощью regex я его извлекаю и использую в следующем запросе. –

+0

+1. Реджиксы будут только болезненными. @RaviVaranasi нет никакой причины, по которой вы не можете использовать библиотеку JSON для анализа любого значения, необходимого для следующего запроса. – Ryan

+0

Я должен использовать регулярное выражение или синтаксический анализ json? –

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).

+0

Большое вам спасибо, но если у меня есть один и тот же код в инструменте gatling, я получаю эту ошибку ---- Ошибки ----------------------- --------------------------------------------- > Нет атрибута с именем 'id' определяется 2 (66.67%) > regex (\ {"id": "(\ w +)). find (0) .exists, ничего не найдено 1 (33.33%) ======================================================================================================== ============================================ –

+0

такое же регулярное выражение, которое я использовал в своем коде, .check (regex (("" "\ {" id ":" (\ w +) "" ")). find.exists.saveAs (" id ")) –

+0

Попробуйте' .check (regex ("" ​​"\ {" id ":" (\ W +) "" "). whatever.saveAs (" ID "))'. –

Смежные вопросы