Scala:匹配可选的正则表达式组

Bef*_*rem 14 regex pattern-matching scala-2.8

我正在尝试使用以下代码匹配Scala 2.8(beta 1)中的选项组:

import scala.xml._

val StatementPattern = """([\w\.]+)\s*:\s*([+-])?(\d+)""".r

def buildProperty(input: String): Node = input match {
    case StatementPattern(name, value) => <propertyWithoutSign />
    case StatementPattern(name, sign, value) => <propertyWithSign />
}

val withSign = "property.name: +10"
val withoutSign = "property.name: 10"

buildProperty(withSign)        // <propertyWithSign></propertyWithSign>
buildProperty(withoutSign)     // <propertyWithSign></propertyWithSign>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.匹配可选正则表达式组的正确方法是什么?

Bef*_*rem 20

如果不匹配,则可选组将为null,因此您需要在模式匹配中包含"null":

import scala.xml._

val StatementPattern = """([\w\.]+)\s*:\s*([+-])?(\d+)""".r

def buildProperty(input: String): Node = input match {
    case StatementPattern(name, null, value) => <propertyWithoutSign />
    case StatementPattern(name, sign, value) => <propertyWithSign />
}

val withSign = "property.name: +10"
val withoutSign = "property.name: 10"

buildProperty(withSign)        // <propertyWithSign></propertyWithSign>
buildProperty(withoutSign)     // <propertyWithSign></propertyWithSign>
Run Code Online (Sandbox Code Playgroud)

  • 如果Scala可以将Option类用于可选的regex字段而不需要进行空检查,那就太好了. (4认同)