2011-07-17 11 views

답변

20
val r = """^!!!(.*)""".r 
val r(suffix) = "!!!rest of string" 

그래서 suffix는 문자열의 나머지로 채워집니다, 또는 scala.MatchError가 발생됩니다.

다른 변형은 다음과 같습니다

val r = """^(!!!){0,1}(.*)""".r 
val r(prefix,suffix) = ... 

그리고 prefix이 일치합니다 하나! 또는 null 일 수 있습니다. 예 :

(prefix, suffix) match { 
    case(null, s) => "No prefix" 
    case _ => "Prefix" 
} 

위를

는 좀 더 복잡한 당신이 필요로하는 것보다이지만, 스칼라의 정규 표현식 통합의 힘을보고 가치가있다. 당신이 수시로 물건의 종류가 있다면

9

, 그것은

str match{ 
    case BangBangBangString(rest) => println(rest) 
    case _ => println("Doesn't start with !!!") 
} 

또는

for(BangBangBangString(rest)<-myStringList){ 
    println("rest") 
} 
+2

, 당신이 좋아하는 startsWith 인수의 첫 번째 매개 변수로 접두사 추출기와 같은 클래스를 만든 다음 그것을 사용할 수 있습니다 :'발 BandBangBangString = 새로운 PrefixExtractor ("!!!") ' – Chad

0
다음과 같이

object BangBangBangString{ 
    def unapply(str:String):Option[String]= { 
     str match { 
      case s if s.startsWith("!!!") => Some(s.stripPrefix("!!!")) 
      case _ => None 
     } 
    } 
} 

그런 다음 당신은 추출기를 사용할 수있는 추출기를 만드는 아마 가치

좋은 질문입니다! 나는 답을 찾기 위해 많은 노력을했습니다. 여기

대신 단일 사용자 추출기를 만드는 good link where I found the answer

object _04MatchExpression_PatternGuards { 
    def main(args: Array[String]): Unit = { 
    val url: String = "Jan"; 

    val monthType = url match { 
     case url if url.endsWith(".org") => "Educational Websites"; 
     case url if url.endsWith(".com") => "Commercial Websites"; 
     case url if url.endsWith(".co.in") => "Indian Websites" 
     case _        => "Unknow Input"; 
    } 
    } 
} 
+0

다른 질문에 대한 대답입니다. –

관련 문제