我正在尝试确定一个简单的正则表达式是否与Groovy中的字符串匹配。这是我在gradle中的任务。我尝试在网上找到两种不同的方式,但它们都不起作用。它始终打印出“NO ERROR FOUND”
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"
}
}
答案 0 :(得分:8)
(?s)
忽略.*
(DOTALL)的换行符,正则表达式表示完全匹配。所以以==~
作为快捷方式:
if ("bla bla errors found:\nhehe Aborting now\n hehe" ==~ /(?s).*errors.*/) ...
答案 1 :(得分:3)
if (errorPattern.matcher(stdoutStr).matches()) {
matches()
方法要求整个字符串与模式匹配,如果要查找匹配的子字符串,请使用find()
代替if(errorPattern.matcher(stdoutStr))
,因为Groovy将Matcher强制转换为布尔值致电find
)。