c# – 用于转换超链接的RegExp帮助
发布时间:2020-12-15 21:15:42 所属栏目:百科 来源:网络整理
导读:我试图想出一个正则表达式并尝试了许多组合并搜索以找到将非超链接地址转换为超链接的解决方案. 即 http://twitpic.com/abcdef http://www.smh.com.au askjhsd www.hotmail.com ks sd a href="http://www.aaaaaaaa.com"aaaaaaaa/a 我想要http://twitpic.com/
我试图想出一个正则表达式并尝试了许多组合并搜索以找到将非超链接地址转换为超链接的解决方案.
即 http://twitpic.com/abcdef http://www.smh.com.au askjhsd www.hotmail.com ks sd <a href="http://www.aaaaaaaa.com">aaaaaaaa</a> 我想要http://twitpic.com/abcdef,http://www.smh.com.au和www.hotmail.com,但不是http://www.aaaaaaaa.com,因为它被包装围绕< a>标签已经. 我目前在C#中使用此正则表达式 return Regex.Replace(input,@"(b((http|https)://|www.)[^ ]+b)",@" <a href=""$0"" target=""_blank"">$0</a>",RegexOptions.IgnoreCase); 我不知道如何排除已包含在< a>中的内容或者< img> 救命 :) 编辑 对于那些稍后阅读的人来说,这是我提出的最终解决方案 /// <summary> /// Adds to the input string a target=_blank in the hyperlinks /// </summary> public static string ConvertURLsToHyperlinks(string input) { if (!string.IsNullOrEmpty(input)) { var reg = new Regex(@"(?<!<s*(?:a|img)b[^<]*)(b((http|https)://|www.)[^ ]+b)"); return reg.Replace(input,new MatchEvaluator(ConvertUrlsMatchDelegate)); } return input; } public static string ConvertUrlsMatchDelegate(Match m) { // add in additional http:// in front of the www. for the hyperlinks var additional = ""; if (m.Value.StartsWith("www.")) { additional = "http://"; } return "<a href="" + additional + m.Value + "" target="_blank">" + m.Value + "</a>"; } 解决方法
你可以用
@"(?<!<s*(?:a|img)b[^<]*)(b((http|https)://|www.)[^ ]+b)" 作为你的正则表达式. negative lookbehind assertion. 后视断言解释说: (?<! # Assert that it's impossible to match before the current position:... < # a < s* # optional whitespace (?:a|img) # a or img b # as an entire word [^<]* # followed by any number of characters except < ) # end of lookbehind (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |