我正在为这个项目使用C#,基本上我需要的是一种将纯文本转换成HTML的方法,我找到了一个正则表达式(我认为实际上是Stack Overflow),用于将文本中的链接转换为HTML中的锚链接,它看起来像这样:
Regex regx = new Regex(@"https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?", RegexOptions.IgnoreCase);
MatchCollection mactches = regx.Matches(input);
foreach (Match match in mactches)
{
output = output.Replace(match.Value, String.Format("<a href=\"{0}\" target=\"_blank\">{0}</a>", match.Value));
}
它工作得很好但是我发现了一个缺陷,因为它不考虑破折号( - )作为URL的一部分,所以当它碰到第一个破折号时它会关闭锚标记。 所以我显然需要在正则表达式中以某种方式包含短划线,但问题是我对RegEx完全没有任何线索,它对我来说看起来像俄语。 有没有人知道我需要对RegEx表达式进行哪些小编辑,以使其在URL中包含短划线作为允许的字符?
答案 0 :(得分:2)
试试这个:@"https?://([-\w\.]+)+(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)?"
我在第二个字符类(方括号中的部分)添加了一个短划线,以匹配不是域名的URL部分中的短划线。
答案 1 :(得分:0)
我使用的是支持ftp
和file
方案以及http
的方法:
@"\b((https?|ftp|file)://|(www|ftp)\.)[-A-Z0-9+&@#/%?=~_|$!:,.;\(\)]*[A-Z0-9+&@#/%=~_|$]"
它会识别包含由&
分隔的参数的网址,如下所示:
http://www.cbsnews.com/video/watch/?id=7400904n&tag=re1.channel
原文位于Extract URLs from a text (Regex)。我稍微修改了它以识别包含如下括号的URL:
http://msdn.microsoft.com/en-us/library/ms686722(v=VS.85).aspx
您需要使用此正则表达式指定RegexOptions.IgnoreCase
,当然您可以通过将A-Z
替换为\w
来简化。