2011-01-08 35 views
0

URIのドメイン部分のみを正規表現とどのように一致させることができますか?私は多くの例を見ていますが、サブドメインも同じです。私が探しているのは、ドメインだけをキャプチャすることですが、わかりません。正規表現:URIのドメイン一致

したがって、http://foo.google.tdl/bargoogleと一致する必要があります。

2番目の質問として、私はVB.NETプログラムでこれを実装しようとしています。正規表現なしでそれを行うための他の方法がありますか?

答えて

2

これを試してみてください:

^[^\/]+:\/\/[^\/]*?\.?([^\/.]+)\.[^\/.]+(?::\d+)?\/ 

http://www.rubular.com/r/Uv5ON7eAz4

^    # Match the beginning of the string 
[^\/]+:\/\/ # Match the protocol (e.g. http://) 
[^\/]*?  # Non-greedy match of the sub-domains 
\.?   # Optional . (for when a sub-domain is used) 
([^\/.]+)  # Group the domain 
\.   # . between domain and tld 
[^\/.]+  # tld 
(?::\d+)?  # Optional port 
\/   # Slash between tld and path 
+0

したがって、example.comはドメインを「co」にします。それは正しいことができません – justintime

+0

@justintime良い点。これを正確に解決するには、すべてのtldのリストが必要です。そうでなければ 'foo.bit.ly'をどのように扱うのでしょうか? – marcog

1

はVB.NETを知らないが、あなただけのドメイン部分をしたい、とあなたは確信している場合は、常に同じを持っていますプロトコルを使用すると、次の4つの簡単な手順で目的を達成できます。

  1. URI(http://あなたの場合)からプロトコルを削除します。
  2. 最初の/オカレンスで残りの部分を分割し、最初の部分を保持します。
  3. 残りの部分を最後に分割します。最初の部分を保持してください。
  4. 残りの部分を最後に分割します。最後の部分を保持してください。

はPythonでこれはとほぼ同等で、次のようになります。あなたの特定のケース(HTTP接頭辞、トップレベルドメイン)のための

uri = uri.replace('http://', '') 
uri = uri.split('/', 1)[0] 
uri = uri.rsplit('.', 1)[0] 
uri = uri.rsplit('.', 1)[1] 

明らかにこれだけ作品が、提供URI場合は動作するのに十分な一般的ですプロトコルを指定しておらず、パスがなく、サブドメインもありません。

+0

そしてポートはありません:-) – Joey

関連する問題