我使用 VB.NET 并想将 http://
添加到所有未以 http://、https://、ftp://等开头的链接上。
"I want to add http here <a href=""www.google.com"" target=""_blank"">Google</a>,
but not here <a href=""http://www.google.com"" target=""_blank"">Google</a>."
当我只有链接时很容易,但是对于包含多个链接的整个字符串我找不到好的解决方案。我想 RegEx 是可行的方法,但我什至不知道从哪里开始。
我可以自己找到 RegEx,这是我遇到问题的解析和前置。谁能给我一个在 C# 或 VB.NET 中使用 Regex.Replace() 的示例?
感谢任何帮助!
最佳答案
引用 RFC 1738:
"方案名称由一系列字符组成。小写字母"a"--"z"、数字和字符加号("+")、句点(".")和连字符("- ") 是允许的。为了弹性,解释 URL 的程序应该将方案名称中的大写字母视为等同于小写字母(例如,允许“HTTP”和“http”)。
太棒了!要匹配的正则表达式:
/^[a-zA-Z0-9+.-]+:\/\//
如果与您的 href 字符串匹配,请继续。如果不是,请在前面加上“http://”。除非您要求提供具体细节,否则其余的完整性检查由您自己完成。请注意其他评论者对相关链接的看法。
编辑:我开始怀疑您问错了问题……您可能没有任何东西可以将文本拆分成您需要处理的单个标记。参见 Looking for C# HTML parser
编辑:作为盲目尝试忽略所有内容并仅攻击文本,使用不区分大小写的匹配,
/(<a +href *= *")(.*?)(" *>)/
如果第二个反向引用匹配 /^[a-zA-Z0-9+.-]+:\/\//
,什么也不做。如果不匹配,则替换为
$1 + "http://" + $2 + $3
这不是 C# 语法,但它应该可以毫不费力地进行转换。
关于regex - 添加 http ://to all links without a protocol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4793209/