2015-08-31 2 views
2

Это должно быть что-то глупое, но мне интересно, может ли кто-нибудь помочь мне здесь. Следующее соответствие шаблону регулярного выражения в совпадении класса case не работает, как я ожидал. Может ли кто-нибудь дать представление? Благодарю.Шаблон шаблона регулярного выражения с использованием Scala

object Confused { 

    case class MyCaseClass(s: String) 

    val WS = """\s*""".r 

    def matcher(myCaseClass: MyCaseClass) = myCaseClass match { 
    case MyCaseClass(WS(_)) => println("Found WS") 
    case MyCaseClass(s) => println(s"Found >>$s<<") 
    } 

    def main(args: Array[String]): Unit = { 
    val ws = " " 

    matcher(MyCaseClass(ws)) 
    } 
} 

Я ожидаю, что первый случай в матче с шаблоном будет соответствовать тому, который соответствует, но это не так.

Печатается

Найдено >> < <

ответ

5

Оно должно быть:

val WS = """(\s*)""".r 

Для вашего вопроса, вы хотите, чтобы соответствовать шаблону пространств, в Scala,

Регулярное выражение используется для определения того, соответствует ли строка шаблону , и, если это необходимо, для извлечения или преобразования частей, которые соответствуют.

для извлечения матчей необходимо использовать group, чтобы нарисовать строку. Это означает, что мы должны использовать parentheses вокруг нашей строки шаблона.

Пример:

val date = """(\d\d\d\d)-(\d\d)-(\d\d)""".r 
"2004-01-20" match { 
    case date(year, month, day) => s"$year was a good year for PLs." 
} 
+0

Хотя этот код может ответить на вопрос, обеспечивая дополнительный контекст относительно того, почему и/или, как этот код отвечает на вопрос улучшает долгосрочную ценность. – NathanOliver

+0

@NathanOliver, Спасибо, я добавил подробности для объяснения. – chengpohi

+0

Спасибо! Я был прав. Это было ** что-то глупое. –

Смежные вопросы