Как сопоставить строку с шаблоном в 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).

Другие вопросы по тегам