Как сопоставить строку с шаблоном в Groovy
Я пытаюсь решить, соответствует ли простое регулярное выражение строке в Groovy. Вот моя задача в Gradle. Я пытался сопоставить 2 разных способа, которые я нашел в сети, но ни один из них не работает. Он всегда печатает "НЕТ ОШИБКИ НАЙДЕНО"
task aaa << {
String stdoutStr = "bla bla errors found:\nhehe Aborting now\n hehe"
println stdoutStr
Pattern errorPattern = ~/error/
// if (errorPattern.matcher(stdoutStr).matches()) {
if (stdoutStr.matches(errorPattern)) {
println "ERROR FOUND"
throw new GradleException("Error in propel: " + stdoutStr)
} else {
println "NO ERROR FOUND"
}
}
2 ответа
Решение
(?s)
игнорирует разрывы строк для .*
(DOTALL) и регулярное выражение там означает полное совпадение. так с ==~
как ярлык это:
if ("bla bla errors found:\nhehe Aborting now\n hehe" ==~ /(?s).*errors.*/) ...
if (errorPattern.matcher(stdoutStr).matches()) {
matches()
Метод требует, чтобы вся строка соответствовала шаблону, если вы хотите найти соответствующие подстроки, используйте find()
вместо (или просто if(errorPattern.matcher(stdoutStr))
так как Groovy принуждает Matcher к логическому, вызывая find
).