2011-07-17 13 views

cevap

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

Yani suffix dize ait kalanı ile doldurulur veya scala.MatchError atılan.

Farklı bir varyantı olabilir:

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

Ve prefix maç olacak ya !!! veya boş ol. Örneğin.

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

yukarıda

biraz daha karmaşık ihtiyacınız olabilecek daha, ama Scala'nın regexp'in entegrasyon güçte incelemekte fayda vardır. Eğer sık ​​yapmak gibi şeylerde ise

9

, bu

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

hatta

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

, sizin gibi startswith argümanının ilk parametre ile önek çıkarıcı gibi bir sınıf yapmak ve sonra kullanabilirsiniz geçerli: 'val BandBangBangString = new PrefixExtractor ("!!!") ' – Chad

0
şöyle

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

Sonra çıkarıcı kullanabilirsiniz bir aspiratör yaratarak değer demektir

İyi soru! Hatta cevabı bulmak için çok çalışıyordum. İşte

yerine tek bir kullanıcı çıkarıcı yapma 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

Bu, farklı bir soruya cevap veriyor. –

İlgili konular