regex - 添加 http ://to all links without a protocol

标签 regex vb.net

我使用 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/

相关文章:

PHP/正则表达式 : extracting video id from youtube url- embedded code

javascript - 如何修改文本输入框以使其仅接受某些字符?

vb.net - 无法在 vb.net 中查看表单设计器

c# - 什么是NullReferenceException,如何解决?

vb.net - Visual Studio 2015 Analyzer 引发异常

python - 使用正则表达式读取日志

c# - 正则表达式 "Full Name"到 "Abbreviated Name"

Mysql用正则表达式替换论坛引用标签的查询

.NET:ArrayList 与 List

asp.net - IE8 后退按钮在 ASP .NET 页面上停止工作