开发者

Scala: Matching optional Regular Expression groups

I'm trying to match on an option group in Scala 2.8 (beta 1) with the following code:

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>

But this is not working. What is the correct way to match optional regex groups?


The optional group will be null if it is not matched so you need to include "null" in the pattern match:

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>


I don't see any problem with your regex. Although you need not escape the . in the char class.

EDIT:

You can try something like:

([\w.]+)\s*:\s*((?:+|-)?\d+)

To capture the name and value where the value can have an optional sign.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜