2011-02-24 10 views
1

をURLを取得する可能性の重複:正規表現を使用して文字列からURLを抽出しようとしている
Get a URL from a String文字列から

こんにちは、イム。文字列は、 "lorem ipsum baby www.test.com lorem"、 "lorem ipsum http://www.test.com foo bar"、または "lorem www.test.com"のようなものです。
使用
MatchCollection ms = Regex.Matches(adress, @"(www.+|http.+)([\s]|$)");
は文字列全体を返します。 regexp-guruが私にこのことを助けてくれますか?

編集:
はこのようにそれを解決:
MatchCollection mc = Regex.Matches(adress, @"(www[^ \s]+|http[^ \s]+)([\s]|$)", RegexOptions.IgnoreCase);
adress = mc[0].Value;
WebBrowserTask task = new WebBrowserTask();
task.URL = adress;
task.Show();

はあなたの助けありがとうございました! :)

+0

** VERY **プリミティブ:((?:https?:\/\/| www | [^ \ s] + \。[az] {2,3})[^ \ s] *?)[\。\?;:]? 'は動作するはずです。しかし、URLを囲む可能性のあるすべてのメタキャラクタを排除するために、非常に長い正規表現が必要です。 –

+0

この場所は先頭に立っていますか? –

+3

正規表現がURLにマッチするようにする人の数が増えれば、microsoftは共通の式の標準ライブラリを作成し、どこかの.NETフレームワークに置くべきです。 'Url.Matches(address)'や 'Guid.Matches(@string)'や 'DateTime.Matches(@string)'を行うのはクールだと思う。 – kelloti

答えて

4

+0

はい、これが問題でした。 :|ありがとう:) – nevva

+0

いつでも問題はありません! – clamchoda

0

私は問題が "識別子はキャプチャを終了したい後続スペースを含む何でも一致します。 "。+"を "[^] +"に変更するか、かっこ内に "?:"を入れて最初のキャプチャを "非実行"にすると、必要な答えが得られます。私はこのコードで何も悪いが、実際に存在しないことを私たちはここに明らかに不足していると思う

string txt = "lorem ipsum baby http:\\\\www.google.com\/"; 
Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", 
RegexOptions.IgnoreCase); 
MatchCollection ms = regx.Matches(txt); 
3

はこのような何かを試してみてください。

おそらくOPがmatch.valueを正しく呼び出していない可能性があります。

string adress = "hello www.google.ca"; 
// Size the control to fill the form with a margin 
MatchCollection ms = Regex.Matches(adress, @"(www.+|http.+)([\s]|$)"); 
string testMatch = ms[0].Value.ToString(); 

testMatchは

これはあなたの意図のネバはない "www.google.ca" が含まれて?

+0

著者は、httpで始まったものだけでなく、 "www"接頭辞と一致させたいと考えました。 ;どちらにせよ、私は[RegExLib](http://regexlib.com/)はどんなところからも始めるのに適していると思う。 –