2011-07-25 13 views
1

すべてのWebアドレスを見つけてハイパーリンクに変更する必要があるユーザーテキストのブロックがあります。たとえば、次のブロックでは、www.google.comを<a href="www.google.com">www.google.com</a>に、www.yahoo.comを<a href="www.yahoo.com">www.yahoo.com</a>に、それぞれ置き換える必要があります。URLをC#を使用してライブリンクに置き換えます。

Lorem ipsum dolor sit www.google.com amet、consitetuer adipiscing elit、www.yahoo.com sid diamノミミーニッスイユーモドーニ派派遣者ロレートドローレマグナアリクアムvolatpat。私はその文字列を分割し、各単語を正規表現にマッチさせる必要がありますか?一致するものが見つかった場合は置き換えますか?しかし、私はそこにもっと良いアプローチがあると思います。私はそれを理解することができません。

Thanx for the help。

Devang。

+0

どれくらい良いことが必要ですか?たとえば、「google.com」などのドメインと一致させたいのですか、リンクが常に「www」で始まると想定できますか?良い解決策 – cbp

+0

http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links - 正規表現は、WWWの様々な組み合わせに対応するために必要とHTTP/sの後ろにアドレスが続きます。また、ブロックに複数のURLがある場合は、それらをすべて置き換えるのに十分なスマートでなければなりません。最後に、URLにカンマ、完全停止、疑問符などの特殊文字が続く可能性があります。 – rkw

+0

@cbpのように見えます – DevM

答えて

0
string s = "Lorem ipsum dolor sit www.google.com amet, consectetuer adipiscing elit, www.yahoo.com sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip"; 

string newS = Regex.Replace(s, "((https?://)?www\\.[^\\s]+)", "<a href=\"$1\">$1</a>"); 

Console.WriteLine(newS); 
+1

「www.yahoo.comにアクセスしましたか? – Gabe

0

Regex.Replace最初の文字列を分割する必要がないので、与えられたパターンに一致するサブ文字列の複数の出現を置き換えます。

難しい部分は、あなたがURLとして一致させたいものを決定しています。たとえば、RFC 3987と互換性のある文字列に一致させる場合、パターンはかなり複雑になります。

埋め込まれたURLに「http://」の部分が含まれていない場合は、それらを識別するのが難しい場合があります。そのため、選択したパターンは入力テキストによって異なります。

関連する問題