Scala 使用基于类的 Java 正则表达式引擎java.util.regex.Pattern
。 Pattern
只有一种可以创建正则表达式的方法:
public static Pattern compile(String regex)
就是这样,Scala 没有给你任何相关的增强。
但是你可以做的一件事是在 match 语句中使用内置的联合,这里显示了捕获组,以防你想从字符串中提取一些东西:
val Dig = """(\d+)""".r
val Wsp = """(\s+)""".r
scala> "45" match { case Dig(_) | Wsp(_) => println("found"); case _ => }
成立
scala> " " match { case Dig(_) | Wsp(_) => println("found"); case _ => }
成立
如果你真的想要一个组合的正则表达式,你必须在字符串级别进行。Pattern
您可以使用 Scala 正则表达式获取 java .pattern
,然后另一个.pattern
获取字符串。大多数正则表达式都可以安全地包装起来(?:)
以获得非捕获块,因此您可以像这样组合:
val Both = ("(?:"+Dig.pattern.pattern+")|(?:"+Wsp.pattern.pattern+")").r
但是,内部的任何捕获组都将被表示,但未使用的分支将是null
(不完全是编写惯用 Scala 的好方法,但无论如何,这是 Java 使用的):
scala> "2" match { case Both(d,w) => if (w!=null) println("white") else println(d) }
2
scala> " " match { case Both(d,w) => if (w!=null) println("white") else println(d) }
white