【问题标题】:How to match String with Pattern in Groovy如何在 Groovy 中将字符串与模式匹配
【发布时间】:2015-01-07 09:22:11
【问题描述】:

我正在尝试确定一个简单的正则表达式是否与 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"
    }
}

【问题讨论】:

  • String.contains 不够吗?
  • 在我的真实代码中,我使用了一个正则表达式,例如:/(?i)error|fail|abort/,我不确定 contains 是否适用于 Patters。如果是这样,那将是一个很好的解决方案
  • 不,我以为这只是error 的情况:-)
  • 同意示例代码没有明确说明 OP 想要使用匹配的子字符串数据。我也喜欢String.startsWith()

标签: regex string groovy gradle match


【解决方案1】:

(?s) 忽略 .* (DOTALL) 的换行符,并且那里的正则表达式表示完全匹配。所以用==~作为快捷方式是:

if ("bla bla errors found:\nhehe Aborting now\n hehe" ==~ /(?s).*errors.*/) ...

【讨论】:

    【解决方案2】:
    if (errorPattern.matcher(stdoutStr).matches()) {
    

    matches() 方法需要整个字符串来匹配模式,如果要查找匹配的子字符串,请改用find()(或者只使用if(errorPattern.matcher(stdoutStr)),因为Groovy 通过调用find 将匹配器强制为布尔值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多