使用URL提取的正则表达式

时间:2013-02-18 05:16:06

标签: c# .net regex url

我正在为这个项目使用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中包含短划线作为允许的字符?

2 个答案:

答案 0 :(得分:2)

试试这个:@"https?://([-\w\.]+)+(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)?"

我在第二个字符类(方括号中的部分)添加了一个短划线,以匹配不是域名的URL部分中的短划线。

答案 1 :(得分:0)

我使用的是支持ftpfile方案以及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来简化。