Ваше регулярное выражение не находит соответствия, и группа соответствия 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 или более символам, отличным от &
.