首页 > 解决方案 > Scala - 匹配非空字符串的正则表达式

问题描述

在 Scala 中 - 我需要验证给定的字符串是否为非空。以下代码段返回 true。正则表达式和匹配有什么问题?

  def isEmpty(input: String): String = {
    val nonEmptyStringPattern = raw"""(\w+)""".r
    input match {
      case nonEmptyStringPattern => s"matched $input"
      case _ => "n/a"
    }
  }

但是,在下面的匹配方法上,同样的正则表达式可以工作。


   def isEmpty(input: String): String = {
    val nonEmptyStringPattern = raw"""(\w+)""".r
    input match {
      case input if nonEmptyStringPattern matches( input) => s"matched $input"
      case _ => "n/a" ```.  
    }
  }

这是否意味着匹配不能有正则表达式实例?

标签: regexscalamatch

解决方案


就像case x => ...创建一个新变量x来匹配一样,对于case nonEmptyStringPattern => .... 创建了一个新变量,它会隐藏现有的nonEmptyStringPattern. 而且由于它是一个不受阻碍的变量,它会匹配任何东西。

此外,您已经创建并编译了一个正则表达式模式,但您必须调用它才能对其进行模式匹配。

def isEmpty(input: String): String = {
  val nonEmptyStringPattern = "\\w+".r
  input match {
    case nonEmptyStringPattern() => s"matched $input"
    case _ => "n/a"
  }
}

String这现在有效,除了并非所有字符都是\w单词字符的事实。

isEmpty("")     //res0: String = n/a
isEmpty("abc")  //res1: String = matched abc
isEmpty("#$#")  //res2: String = n/a

推荐阅读