2010-12-01 10 views
0

ちょっと、C#で正規表現を使ってURLのホスト名を解析する方法が不思議です。C#のURLからホスト名を解析する正規表現ですか?

私は、次の正規表現があります

Regex regexUrl = new Regex("://(?<host>([a-z\\d][-a-z\\d]*[a-z\\d]\\.)*[a-z][-a-z\\d]+[a-z])"); 

をしかし、URLが「のhttp://」が含まれていない場合は、エラーがスローされます「WWW」、そしてそれがまた出て解析しませんURLの一部

「http://」が含まれていなくても、URLから「hostname.com」を解析する関数をどのように記述すればよいでしょうか。ありがとう:)

答えて

3

正規表現は使用しません。

  1. 変換 'のhttp://' に '' あなたの文字列の(空の文字列) - ということは、基本的には、HTTPを削除://それは、配列
  2. ホスト名として/
  3. Split上の文字列があるかどうインデックス0
3

どうしてこのようなsomethiingしないのですか?

Uri uri; 
if (!Uri.TryCreate(s, UriKind.Absolute, out uri)) { 
    if (!Uri.TryCreate("http://" + s, UriKind.Absolute, out uri)) { 
     throw new ArgumentException(); 
    } 
} 

return uri.Host; 

これはもっと多くの行ですが、正規表現よりもきれいで読みやすいです。

+0

どちらかがこれをするとき、供給「:666れ、testServer」動作しないことです。 URIのホストは不明です。次のようなサンプルを修正する必要があります –

+0

if(!Uri.TryCreate(uriStr、UriKind.Absolute、out uri)|| uri.HostNameType == UriHostNameType.Unknown) { if(!Uri.TryCreate( "http:/"+ uriStr、UriKind.Absolute、out uri)|| uri.HostNameType == UriHostNameType.Unknown) { 新しいArgumentException()をスローします。 } } –

-1

[^\/\.\s]+\.[^\/\.\s]+\/の要素である - 唯一の問題は、あなたがこれが何をすべき正規表現を使う、という場合は、ホスト名

0

/を必要とすることです:^([a-z]+://)?(?<host>[a-z\d][a-z\d-]*(\.[a-z\d][a-z\d-]*)*)[/$]

トリックは、最後の文字が一致し/またはターミネータ($

関連する問題