Groovy正则表达式匹配中的错误。此错误表示什么?

时间:2019-01-18 04:51:21

标签: regex groovy

这是我看到的错误。

  

ASR JSR223脚本中的问题   javax.script.ScriptException:groovy.lang.MissingMethodException:没有方法签名:org.apache.jmeter.threads.JMeterVariables.put()适用于参数类型:(java.lang.String,java.util.regex.Matcher )值:[callbackUri,java.util.regex.Matcher [pattern =(?<= callbackUri =)。*(?=&)region = 0,537 lastmatch =]]   可能的解决方案:put(java.lang.String,java.lang.String),get(java.lang.String),putAt(java.lang.String,java.lang.Object),wait(),any(), dump()

这是导致它的行:

def callbackUriMatch = (redirectQuery =~ /(?<=callbackUri=).*(?=&)/)[0]

1 个答案:

答案 0 :(得分:1)

您的正则表达式找不到匹配项,并且匹配器组0未初始化。您需要使用更安全的正则表达式,并在尝试访问任何组之前始终检查是否存在匹配项:

def redirectQuery = "&callbackUri=someValue"
def callbackUriMatch = redirectQuery =~ /(?<=[&?]callbackUri=)[^&]*/
if (callbackUriMatch) {
    println callbackUriMatch.group()
}

请参见Groovy demo

在这里,callbackUriMatchjava.util.regex.Matcher对象。使用if (callbackUriMatch),检查是否找到匹配项,如果有匹配项,则可以访问整个匹配项callbackUriMatch.group()

模式详细信息

  • (?<=[&?]callbackUri=)-当您要获取查询参数值时,应在其前面加上&?,然后将您的键值和=匹配,然后模式用后向构造包装,该构造不会将其匹配的文本添加到匹配值中
  • [^&]*-与&以外的0个或多个字符匹配的否定字符类。