Reg表达式包括不在.com / .net / etc中结束的Intranet站点

时间:2015-06-02 17:43:20

标签: c# asp.net regex

我正在使用regexlib提出一个正则表达式来获取字符串中的url。

到目前为止,我有以下内容:

    message = Regex.Replace(message, @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+
([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)", "<a target='_blank' 
href='$1'>$1</a>");

这似乎非常准确,但在两件事上失败了:

  1. 我无法识别出www.yahoo.com
  2. 形式的网址
  3. 我无法让它适用于Intranet网站,所以像http://mysite/Views/Issues/ListView.aspx之类的东西没有链接:(
  4. 我鄙视正则表达式,可以真正使用一些帮助。

1 个答案:

答案 0 :(得分:2)

怎么样:

编辑:

resultString = Regex.Replace(subjectString, @"(\b(?:(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%?=~_|$!:,.;]*[-A-Z0-9+&@#/%=~_|$]|((?:mailto:)?[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z]{2,6})\b)|""(?:(?:https?|ftp|file)://|www\.|ftp\.)[^""\r\n]+""|'(?:(?:https?|ftp|file)://|www\.|ftp\.)[^'\r\n]+')", "$1", RegexOptions.IgnoreCase | RegexOptions.Multiline);