Ошибка в сопоставлении Groovy Regex. Что означает эта ошибка? - PullRequest
0 голосов
/ 18 января 2019

Это ошибка, которую я вижу.

Проблема в скрипте 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 = (? <= 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 (), дамп () </p>

Это строка, которая вызывает его:

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

1 Ответ

0 голосов
/ 18 января 2019

Ваше регулярное выражение не находит соответствия, и группа соответствия 0 не инициализирована. Вам нужно использовать более безопасное регулярное выражение и всегда проверять наличие совпадений, прежде чем пытаться получить доступ к какой-либо группе:

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

См. Groovy демо

Здесь callbackUriMatch является java.util.regex.Matcher объектом. При if (callbackUriMatch) выполняется проверка, найдено ли совпадение, и, если есть совпадение, вы можете получить доступ к callbackUriMatch.group(), всему совпадению.

Детали шаблона

  • (?<=[&?]callbackUri=) - поскольку вы хотите получить значение параметра запроса, ему должно предшествовать & или ?, затем соответствовать вашему значению ключа и =, и этот шаблон обернут конструкцией lookbehind, которая не добавляет сопоставленный текст к значению совпадения
  • [^&]* - класс отрицанных символов, соответствующий 0 или более символам, отличным от &.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...