【问题标题】:Error in Groovy Regex matching. What does this error signify?Groovy 正则表达式匹配错误。这个错误意味着什么?
【发布时间】:2019-01-18 04:51:21
【问题描述】:

这是我看到的错误。

JSR223 脚本中的问题,ABC 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=(?

这是导致它的行:

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

【问题讨论】:

  • 不,那不是相关行。错误消息是`没有方法签名:org.apache.jmeter.threads.JMeterVariables.put() 适用于参数类型:(java.lang.String, java.util.regex.Matcher). You will need to pass two String@987654323 @String` 和一个 Object。您的callbackUriMatch 似乎是java.util.regex.Matcher
  • 这只是表示您没有匹配项,并且没有索引为0的项目。首先检查匹配项。

标签: regex groovy


【解决方案1】:

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

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

Groovy demo

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

模式详情

  • (?&lt;=[&amp;?]callbackUri=) - 当你想得到一个查询参数值时,它应该以&amp;? 开头,然后匹配你的键值和=,并且这个模式被一个不添加的lookbehind 结构包裹其匹配文本到匹配值
  • [^&amp;]* - 一个否定字符类,匹配除 &amp; 之外的 0 个或多个字符。

【讨论】:

    猜你喜欢
    • 2018-09-04
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多