1

我在这个项目中使用 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 中包含破折号作为允许的字符?

4

2 回答 2

2

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

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

于 2013-02-18T05:22:13.383 回答
0

我使用这个支持ftpfile方案以及http

@"\b((https?|ftp|file)://|(www|ftp)\.)[-A-Z0-9+&@#/%?=~_|$!:,.;\(\)]*[A-Z0-9+&@#/%=~_|$]"

它将识别包含&以下分隔参数的 URL:

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.

于 2013-02-18T06:35:23.060 回答