2010-11-21 17 views
0

在我的C#程序中,我编写了一个Google搜索函数,它通过从每个页面获取源代码并通过正则表达式获取URL。URL C的正则表达式#

我的实际正则表达式是:

(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+) 

此作品擅长的那一刻,但我得到例如网址,像http://www.example.com/forums/arcade.php?efdf=332

我只是想在这种情况下获得的URL没有?efdf=332在结束。

那么我该如何改变正则表达式呢?

+0

嗨Omegavirus,欢迎来到堆栈溢出。我注意到,为了正确格式化你的正则表达式,你遇到了很多麻烦,但是你可以让它更容易。只需粘贴原始正则表达式,将其标记并按下Ctrl-K。这会将文本格式设置为逐字文本(如HTML'pre'标签)。错误的可能性要小得多。 – 2010-11-21 14:09:13

+0

哦,我不知道,谢谢;) 和正则表达式是从我的C#程序,所以\逃脱。忘了说。 – Omegavirus 2010-11-21 14:10:07

+2

在C#中,使用正则表达式使用逐字字符串('@“foo”')。那么你不必逃避你的反斜杠。否则你会发疯。正则表达式已经很难读取了... – 2010-11-21 14:15:37

回答

1
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+ 

不一样的您正则表达式(我已经删除了很多不必要的冗余代码),但停止匹配?之前的链接。

在C#:

Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+") 

这么说,我不知道这是匹配的URL的这样一个好办法(?约httpsftpmailto等什么)

+0

非常感谢;) https等是没有问题,因为我不会需要他们.. http是所有:) 刚刚测试你的正则表达式和它的接近工作。但现在我得到的URL像http://www.blabla.com/forums/&blabla 如何过滤这些也出来? – Omegavirus 2010-11-21 14:18:58

+0

所以你只是想不带任何参数的域+路径? – 2010-11-21 15:11:36

+0

这就是我想要的;) – Omegavirus 2010-11-21 15:13:44

0

您可以使用Uri类访问URL的各个部分,并从结尾删除查询字符串,或者连接所需的部分。