2013-03-29 22 views
6

Próbuję zrobić coś jak następuje:Scala mecz przypadek na regex bezpośrednio

list.foreach {x => 
    x match { 
     case """TEST: .*""" => println("TEST") 
     case """OXF.*""" => println("XXX") 
     case _    => println("NO MATCHING") 
    } 
} 

Chodzi o to, aby używać go jak porywające przypadku przełącznik regex meczu. Ale nie mogę się skompilować. Jak to zrobić w scala?

Odpowiedz

16

Można dopasować wstępnie skompilowane wyrażenie regularne (jak w pierwszym przypadku poniżej) lub dodać klauzulę if . Zauważ, że zazwyczaj nie chcesz przekompilować tego samego wyrażenia regularnego na każdą ocenę case, ale raczej mieć je na obiekcie.

val list = List("Not a match", "TEST: yes", "OXFORD") 
    val testRegex = """TEST: .*""".r 
    list.foreach { x => 
    x match { 
     case testRegex() => println("TEST") 
     case s if s.matches("""OXF.*""") => println("XXX") 
     case _ => println("NO MATCHING") 
    } 
    } 

Zobacz więcej informacji here i jakieś tło here.

+1

Chciałbym scala dodać więcej cukru syntaktycznego do obsługi tego, nie podoba mi się dodatkowe kody do dopasowania prostszego wyrażenia regularnego. Po spędzeniu trochę czasu, aby dowiedzieć się, jak to zrobić, nie mogłem uwierzyć, że nie jest to możliwe w Scali, stąd post Stackoverflow! – Sajid

+1

użyj 'val testRegex =" "" TEST: (. *) "" "R' i' case testRegex (m) => println ("TEST" + m) 'aby uchwycić dopasowanie – Renaud