C# 使用正则表达式检测没有http或www部分的URL

C# 使用正则表达式检测没有http或www部分的URL,c#,regex,C#,Regex,我知道这个问题在这个网站上被问了好几次,但没有一个能解决我的问题。 我想要一个正则表达式来匹配像这样的url bendlife.tumblr.com或bendoeslife.com(均无http或www.part) 这是我的c代码 我将非常感谢你的帮助。 谢谢。如果您希望找到一种合理的方法来匹配一个不以方案开头的url片段,那么我认为您无法匹配具有有效顶级域的主机名。你可以得到。不幸的是,这是一个很长的列表,太随意了,无法以编程方式进行匹配,因此您将在正则表达式中遇到一个巨大的字符串,除非您将列

我知道这个问题在这个网站上被问了好几次,但没有一个能解决我的问题。 我想要一个正则表达式来匹配像这样的url bendlife.tumblr.com或bendoeslife.com(均无http或www.part)

这是我的c代码

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

如果您希望找到一种合理的方法来匹配一个不以方案开头的url片段,那么我认为您无法匹配具有有效顶级域的主机名。你可以得到。不幸的是,这是一个很长的列表,太随意了,无法以编程方式进行匹配,因此您将在正则表达式中遇到一个巨大的字符串,除非您将列表缩减一些。但不管怎样,搜索一个看起来像
[^/]*\(ac | ad | ae | ae | aero | af | ag | | zw)/.
(单词边界除外)。

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

此外,我认为大多数情况下,最好分部分编写正则表达式,这样更容易看到您所做的事情,并更改部分。例如,您可以尝试以下方法:

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不是很漂亮,但我不认为你能更好地解决它

编辑: 再想一想,我认为以下几点也应该起作用:

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

firstdomainpart=domainpart+@”(?!您的要求是什么,根据您的要求,可能有多种方法可以实现同样的目的,您是否通过httphandler解决url???@gov-我可能不明白您的问题,但我想说,这个问题是从总是剥离“http://“一个url总是只剩下域部分,例如“stackoverflow.com”而不是”“因此我需要一个正则表达式来匹配此模式和子域,例如“test.stackoverflow.com”。谢谢。也许您可以提供一些示例输入?感谢您的贡献,但确实意味着“[^/]*\”(ac | ad | ae | aero | af | ag |……| zw)/.”这就是我所需要的吗?能否提供与我引用的案例相匹配的确切模式?谢谢。谢谢你的建议。但是,请你帮助我测试和工作了什么?我对上面的代码感到困惑。例如,“domainchar”是什么变量定义?还有,我应该在示例代码中把第二个建议放在哪里?我的兴趣不是排除http://this已被排除在源字符串中,只保留“test.stackoverflow.com”或“stackoverflow.com”之类的内容很抱歉,我将domainchar重命名为dc,因为我多次重复使用它,但在一个地方忘记了它。所有代码都未经测试,它更能向您展示如何构建正则表达式,而不是一次性编写。最终,
wholedomain
返回您想要使用的正则表达式。
firstdomainpart = domainpart + @"(?!<www)";