Идиоматическое сопоставление регулярных выражений в Scala - PullRequest
2 голосов
/ 18 сентября 2010

Я пытаюсь сделать свой код Scala более идиоматичным.Прямо сейчас это выглядит как код Java.

Я пытаюсь сделать простую функцию сопоставления с логическим регулярным выражением в Scala, так как не могу найти ее в стандартной библиотеке (?)

Я не думаю, что результат будет особенно приятным с try-catch и все.Также предварительным условием является то, что у 'patt' есть ровно одна группа, которую я ни для чего не использую.Любой вклад?

def doesMatchRegEx(subj:String, patt:scala.util.matching.Regex) = {
    try{
        val Match = patt
        val Match(x) = subj
        true
    } catch {
        // we didnt match and therefore got an error
    case e:MatchError => false
    }
}

Использование:

scala> doesMatchRegEx("foo",".*(foo).*".r)
res36: Boolean = true

scala> doesMatchRegEx("bar",".*(foo).*".r)
res37: Boolean = false

1 Ответ

9 голосов
/ 18 сентября 2010
def doesMatchRegEx(subj:String, patt:scala.util.matching.Regex) = subj match {
  case patt(_) => true
  case _ => false
}

Как вы можете видеть, это фактически делает метод 'doMatchRegEx излишним.

Как это происходит:

"foo".matches(".*(foo).*") // => true
"bar".matches(".*(foo).*") // => false
".*(foo).*".r.findFirstIn("foo").isDefined // => true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...