2011-01-25 10 views
1

urlのドメイン名部分だけを取り除くにはregexpが必要です。だから、例えば私は、次のURLを持っていた場合:正規表現でドメイン名を削除する必要があります

http://www.website-2000.com

あなたはまた、のどの各部分を説明することができれば、私はマッチする正規表現は、「ウェブサイト-2000」

になりたいと思うビット正規表現は私がそれを理解するのを助けてくれるでしょう。

おかげ

+1

だから、どのような言語ですか? –

+0

[RegExでのドメイン名の検証]の可能な複製(https://stackoverflow.com/questions/10306690/domain-name-validation-with-regex) – csilk

答えて

7

これはうまくいくはずです。それにはいくつかの不具合があるかもしれませんが、私は今考えることができません。誰かが改善したい場合は、自由に行ってください。

/http:\/\/(?:www\.)?([a-z0-9\-]+)(?:\.[a-z\.]+[\/]?).*/i 

http:\/\/   matches the "http://" part 
(?:www\.)?   is a non-capturing group that matches zero or one "www." 
([a-z0-9\-]+)  is a capturing group that matches character ranges a-z, 0-9 
        in addition to the hyphen. This is what you wanted to extract. 
(?:\.[a-z\.]+[\/]?) is a non-capturing group that matches the TLD part (i.e. ".com", 
        ".co.uk", etc) in addition to zero or one "/" 
.*     matches the rest of the url 

http://rubular.com/r/ROz13NSWBQ

+0

最後に '。*'が間違っています。それを '[^] *'に置き換えてください。また、ドメイン名の後に文字をキャプチャします。たとえば、「http://www.website-2000.com jerry hates tom」の場合、「jerry hates tom」も正規表現によってキャプチャされます。問題の範囲ではありませんが、あなたの正規表現の広範な使用に役立ちます。 –

0
http://wwww.([^/]+) 

urlparseモジュールを使用して、正規表現を使用する必要はありません

>>> from urlparse import urlparse 
>>> '.'.join(urlparse("http://www.website-2000.com").netloc.split('.')[-2:]) 
'website-2000.com' 

+0

申し訳ありませんが正規表現で行う必要があります – geoffs3310

+0

ああ、愚かな私はdidnこれはPythonの質問ではないことに気付かないでください – Kimvais

+0

それは確かに私の巨人よりも少しシンプルです。 – hlindset

4

私はあなたにこの素晴らしいツールtxt2reご紹介しましょう:regular expression generator

を彼女e正規表現を試して、多くの言語でコードを生成することができます。

+0

これは私に多くの時間を節約します! –

0

この1つはあなたが前に... HTTP/HTTPS/FTPなどのいずれかを心配する必要がないことができますし、あまりにもすべてのサブドメインをキャプチャします。

(?:www\.)?([a-z0-9\-.]+)(?:\.[a-z\.]+[\/]?).*/i 

それは私が見つけたことを失敗した唯一の時間は、次のとおりです。 - 場合。ドメイン/サブドメインの前にはテキストがありません。正規表現のキャプチャに含まれています。 - のメール。それらでは動作しません。 (正規表現を通じて実行する前に、@記号のために最初に渡さドメインをチェックすることにより、この問題を修正) - 空白のドメイン/サブドメインの真ん中に

+0

これはどうすればhttp://news.bbc.co.uk/のようなものに対応できますか? – andrewsi

0
r/^[^:]+:\/\/[^/?#]+// 

をこれが私のために働きました。

どのスキームまたはプロトコルにも一致し、/:の後に/は一致しない場合、/?または#。これらの3つの文字は、URLで最初に発生したときにドメインの終わりを知らせるため、一致を終了します。

+1

これはなぜ機能するのでしょうか? – csilk

関連する問題