2016-07-20 19 views
1

私は頻繁にパターンマッチングを使用しません。 私は、次のドメイン名に一致しています:「WWW」私は式の中の値(request.domain)を参照し、それがで始まるかどうかを確認するにはどうすればよいドメイン名に一致するパターン

1. If it starts with www., then remove that portion and return. 
    www.stackoverflow.com => "stackoverflow.com" 
2. If it has either example.com or example.org, strip that out and return. 
    blog.example.com => "blog" 
3. return request.domain 
    hello.world.com => "hello.world.com" 

def filterDomain(request: RequestHeader): String = { 
    request.domain match { 
    case //?? case #1 => ? 
    case //?? case #2 => ? 
    case _ => request.domain 
    } 
} 

を以下のような:一致した値の作品をつかむ方法これはかなり明確にする必要があります

case someVar if someVar.length < 2 => someVar.toLowerCase 

case句を書くとき

if request.domain.startsWith("www.") request.domain.substring(4) 
+0

1.あなたは、再帰的な方法に反対していますか? 2.「www.blog.example.com」はどうすればよいですか? – childofsoong

+0

@childofsoong私はこのケースをサポートする必要はありません。ちょうど1レベルのサブドメインです。 – Blankman

答えて

3

を、プラスならば、あなたは置くことができますあなたの場合式の声明次のとおりです。

def filterDomain(request: RequestHeader): String = { 
request.domain match { 
    case domain if domain.startsWith("www.") => domain.drop(4) 
    case domain if domain.contains("example.org") | domain.contains("example.com") => domain.takeWhile(_!='.') 
    case _ => request.domain 
} 
} 

大文字と小文字の順序が重要です。

+0

彼はそれが 'blog'で始まっても気にしない、 'example.com'または 'example.org'で終わると気にする – childofsoong

+1

または、それはそれらに(おそらく最後に) – childofsoong

+0

@childofsoong I私はそれを編集しました。 –

1

次のような何かを行うことができます。 したがって、この場合には、次のような何か書く必要があります:あなたは、パターン名に一致し、Scalaはその型を推論する変数を与えることができます

case d if d.startsWith("www.") => d.substring(4) 
0

あなたが死んで正規表現を使用してのセットではなく、そのようなstartsWithcontainsなどString方法であれば、次の操作を行うことができます。

val wwwMatch = "(?:www\\.)(.*)".r 
val exampleMatch = "(.*)(?:\\.example\\.(?:(?:com)|(?:org)))(.*)".r 
def filterDomain(request: String): String = { 
    request.domain match { 
    case wwwMatch(d) => d 
    case exampleMatch(d1, d2) => d1 + d2 
    case _ => request.domain 
    } 
} 

、保守のために、私はこの道を行くだろう一ヶ月後に私はこれを見て、それが何をしているのか覚えていないでしょうが、それはあなたの呼び出しです。

0

あなたはそのためのパターンマッチングを必要としません:

request.domain 
    .stripPrefix("www.") 
    .stripSuffix(".example.org") 
    .stripSuffix(".example.com")