Scala - строка с частичным совпадением - PullRequest
35 голосов
/ 19 марта 2012

У меня есть следующее:

serv match {

    case "chat" => Chat_Server ! Relay_Message(serv)
    case _ => null

}

Проблема в том, что иногда я также передаю дополнительный параметр в конце строки serv, поэтому:

var serv = "chat.message"

Есть лиКак я могу сопоставить часть строки, чтобы она все еще отправлялась в Chat_Server?

Спасибо за любую помощь, очень признателен:)

Ответы [ 3 ]

49 голосов
/ 19 марта 2012

Привязать шаблон к привязке к переменной и использовать guard , чтобы переменная начиналась с "chat"

// msg is bound with the variable serv
serv match {
  case msg if msg.startsWith("chat") => Chat_Server ! Relay_Message(msg)
  case _ => null
}
48 голосов
/ 19 марта 2012

Используйте регулярные выражения;)

val Pattern = "(chat.*)".r

serv match {
     case Pattern(chat) => "It's a chat"
     case _ => "Something else"
}

А с помощью регулярных выражений вы можете легко разделить параметр и базовую строку:

val Pattern = "(chat)(.*)".r

serv match {
     case Pattern(chat,param) => "It's a %s with a %s".format(chat,param)
     case _ => "Something else"
}
0 голосов
/ 16 декабря 2018

Если вы хотите исключить какие-либо группировки при использовании регулярных выражений, убедитесь, что вы используете подстановочный знак последовательности, например _* (согласно документации Scala ).

Из приведенного выше примера:

val Pattern = "(chat.*)".r

serv match {
     case Pattern(_*) => "It's a chat"
     case _ => "Something else"
}
...