【问题标题】:How to parse substring values from a string in the service response using groovy script如何使用 groovy 脚本从服务响应中的字符串解析子字符串值
【发布时间】:2014-09-10 00:28:57
【问题描述】:
以下是服务调用响应的 xml 标记中的字符串。
[CDATA[name=test&username=testaccount&nonce=SL9Z4N03VANY3B5&sharedkeyid=testsystem&auth-expiresby=1410288394751&auth-algorithm=HMACSHA256&auth-signature=tPYLciqNxcEyjHygZ5mBo5qH6q+THhXKu8lyej213Fg=]]
我希望捕获 'auth-expiresby' 和 'auth-signature' 的值,并将它们用作我下一次服务调用的参数值。
【问题讨论】:
标签:
regex
parsing
substring
soapui
【解决方案1】:
这够好吗?
\[CDATA\[.*?auth-expiresby=(\d+).*?auth-signature=(.+?)(?:&.*)?\]\]
Demo
它在[CDATA[ 和]] 之间寻找内容。然后它会在auth-expiresby= 之后捕获 1+ 个数字,在 auth-signature= 之后捕获 1+ 个字符。可能还有更多数据,因此我们可以选择匹配&,然后是更多信息,然后再关闭\]\]。
【解决方案2】:
这是一个纯Java问题,只是选择了一种分解字符串的方式。
def source = '''
[CDATA[name=test&username=testaccount&nonce=SL9Z4N03VANY3B5&sharedkeyid=testsystem&auth-expiresby=1410288394751&auth-algorithm=HMACSHA256&auth-signature=tPYLciqNxcEyjHygZ5mBo5qH6q+THhXKu8lyej213Fg=]]
'''
def authExpiresby
def authSignature
source.split('&').each {
def tokens = it.split('=')
if(tokens[0].equals('auth-expiresby')) {
authExpiresby = tokens[1]
}
if(tokens[0].equals('auth-signature')) {
authSignature = tokens[1]
}
}
assert authExpiresby.equals('1410288394751')
assert authSignature.equals('tPYLciqNxcEyjHygZ5mBo5qH6q+THhXKu8lyej213Fg')