用于将电子邮件转换为超链接的正则表达式,但是如果已经是超链接则没有,并且URLS到超链接缺少尾部斜杠

时间:2014-02-12 23:32:22

标签: c# regex email

我有一个RegEx将电子邮件转换为超链接,但如果电子邮件已经是超链接,它仍然会转换它,这会打破它。我有以下代码:

string regex = @"([&;a-zA-Z_0-9.-]+\@[a-zA-Z_0-9.-]+\.\w+)";

我需要添加一些内容以便在最后检查。我想我需要一个负面的预测 - ?!</a> - 还是什么?

此外,我还有另一个将URL转换为超链接的正则表达式,但如果URL以斜杠结尾,则不包括超链接中的URL。这是我的代码:

var reg = new Regex(@"(?<!<\s*(?:a|img)\b[^<]*)(\b((http|https)://|www\.)[^ <]+\b)");

如何添加尾部斜杠?

1 个答案:

答案 0 :(得分:2)

假设网址为:

test@test.net

是:

<a href="mailto:test@test.net">test@test.net</a>

编辑:如果您不想转换现有的href并处理地址,例如test@test.net.au,那么您可以这样做:

([&;a-zA-Z_0-9.-]+\@[a-zA-Z_0-9.-]+\.\w+)(?!([\w.]+)*(?:</a>|">))

基本上它表示如果后面跟着.和单词字符以及</a>">的某种组合,则与电子邮件地址不匹配。我没有html编码的可读性。

您使用负面预测走在正确的轨道上,但是您需要\w*否则它将匹配test@test.ne,因为后面跟t而不是</a> < / p>

<强>更新

刚看到第二部分。对于尾部斜杠,您可以只追加/?

(?<!<\s*(?:a|img)\b[^<]*)(\b((http|https)://|www\.)[^ <]+\b/?)

这意味着0或1尾随斜杠。