使用正则表达式检测不带http或www部分的URL

时间:2011-02-28 00:03:40

标签: c# regex

我知道在这个网站上已经多次询问过这个问题,但没有一个能解决我的问题。 我想要一个正则表达式来匹配url ilke bendlife.tumblr.com或bendoeslife.com(均无http或www。部分)

这是我的c#代码

string pattern=@"^([a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+.*)$"; //not working
///////@"^(?!www\\.)[A-Za-z0-9_-]+\\.+[A-Za-z0-9.\\/%&=\\?_:;-]+$"; not working either

System.Text.RegularExpressions.Regex urlRegEx=new System.Text.RegularExpressions.Regex(pattern);
bool matched=urlRegEx.IsMatch(description);

我将非常感谢您的帮助。 感谢。

2 个答案:

答案 0 :(得分:0)

如果你想要一个理智的方式来匹配一个不以方案开头的url片段,那么我认为你被困在匹配具有有效顶级域名的主机名。你可以得到an authoritative list of all the TLDs from IADA。不幸的是,这是一个很长的列表,并且过于随意,无法以编程方式匹配,所以除非你削减一些列表,否则你将在你的正则表达式中遇到一个巨大的字符串。但无论哪种方式,都要搜索一个看似[^/]*\.(ac|ad|ae|aero|af|ag|…|zw)/.*的单词(除了字边界)。

答案 1 :(得分:0)

你的第一个正则表达式的问题是它以。*结尾,因此只要它包含两个点就可以匹配几乎所有内容。第二个可以在几乎所有事情中再次结束。

另外,我认为大多数时候,最好是在部分编写正则表达式,更容易看到你做什么,并更改部分。例如,您可以尝试这样的事情:

extension = @"com|net|org";
dc = @"[-a-zA-Z0-9_]"; //always place the - at the start of the characters
dcnw = @"[-a-vxyzA-VXYZ0-9_]";
domainpart = dc + @"+"; 
firstdomainpart = @"(" + dcnw + dc + @"*)|(" + dc + dcnw + dc + @"*)|("
                +  dc + dc + dcnw + dc + @"*)|(" + dc + @"{4,})";
wholedomain = @"(" + firstdomainpart + @")+(\.("
            + domainpart + @"))*\.(" + extension + @")";

这样你肯定它不会以'www'开头(至少我收集的是你的意图来自你的正则表达式中的否定断言)。要排除'http://',请在正则表达式的开头添加一个向后的否定断言。

在我看来,整个第一个部分不是很漂亮,但我认为你不能更好地解决它。

修改 第二个想法,我认为以下内容也应该有效:

firstdomainpart = domainpart + @"(?!<www)";