我们如何在 Groovy 的单个字符串中获取多次出现的正则表达式?

How do we fetch multiple occurrences of a regex in a single string in Groovy?

我有一个字符串需要从中获取 ID 字段 -

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

我需要将所有匹配的 ID 存储在一个数组中。

我尝试使用以下正则表达式,但无法获取字符串 -

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

我不确定它是否匹配,我不确定如何获取匹配的数据。

用 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]

试试这个:

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"]