Как извлечь несколько вхождений регулярного выражения в одну строку в Groovy? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть строка, из которой мне нужно получить поле идентификатора из -

{"jobs":[{"id":"6369c112a2ee5ca08adaa1d01b7e5c74","status":"RUNNING"},{"id":"bbfd87f15334c8e27b40bc46896e95c7","status":"RUNNING"},{"id":"90c5a32e8300da7d43ce351f7f72f0d2","status":"RUNNING"}]}

Что бы мне понадобилось, чтобы все совпадающие идентификаторы хранились в массиве.

Я попробовал следующееregex, но не смог получить строку -

/"id"\ *:\ *"(.*?)"/
/"id"\ *:\ *"(?<id>.*?)"/

Я не уверен, совпадает ли она, и я не уверен, как получить совпадающие данные.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Попробуйте это:

def str = '{"jobs":[{"id":"6369c112a2ee5ca08adaa1d01b7e5c74","status":"RUNNING"},{"id":"bbfd87f15334c8e27b40bc46896e95c7","status":"RUNNING"},{"id":"90c5a32e8300da7d43ce351f7f72f0d2","status":"RUNNING"}]}'
def pattern = /(?<="id":")\w+(?=")/
def matcher = str =~ /$pattern/
assert matcher.collect() == ["6369c112a2ee5ca08adaa1d01b7e5c74", "bbfd87f15334c8e27b40bc46896e95c7", "90c5a32e8300da7d43ce351f7f72f0d2"]
0 голосов
/ 13 февраля 2019

Конечно, более уместно обрабатывать ввод с помощью JSON-анализатора.Это JSON:

def s = '''{"jobs":
                 [{"id":"6369c112a2ee5ca08adaa1d01b7e5c74","status":"RUNNING"},
                  {"id":"bbfd87f15334c8e27b40bc46896e95c7","status":"RUNNING"},
                  {"id":"90c5a32e8300da7d43ce351f7f72f0d2","status":"RUNNING"}]}'''

def ids = new groovy.json.JsonSlurper().parse(s.bytes).jobs.collect{it.id}

И это устанавливает ids на [6369c112a2ee5ca08adaa1d01b7e5c74, bbfd87f15334c8e27b40bc46896e95c7, 90c5a32e8300da7d43ce351f7f72f0d2]

...