2011-04-27 68 views
1

嘿家伙。我,想有由一个正则表达式匹配所有的URL像这样:正则表达式ISSUE - 无法匹配以无结尾的URL

  1. http://example.com
  2. http://example.com/
  3. http://example.com/index.html
  4. http://example.com/index
  5. http://example.com/index/
  6. http://www.example.com
  7. http://www.example.com/
  8. http://www.example.com/index.html
  9. http://www.example.com/index
  10. http://www.example.com/index/

,并匹配有 '#' 或'网址吗? '直到那两个人之前的角色。 这样 http://example.com/index.php?p=Hey - >http://example.com/index.php

正则表达式代码选择除了一个情况下,只有某些类型的文件或文件夹时,我至今运作良好:

  • ,如果我有一个不是结束的URL无论是文件扩展名(例如:.html,.php)还是文件夹(例如:/),该模式都将无法正确匹配,因为某些URL(例如:http://example.com/about-me)将被排除。

任何帮助表示赞赏。感谢大家。


这是正则表达式:

^(?<protocol>http(s?))://(?<domain>[^/\r\n#?]+)(?<path>/[^?#]*(?:html|php|/))? 
+0

你只是想从URL中删除'?'或'#'中的所有内容吗? – morja 2011-04-27 12:05:34

+0

基本上是的,每个网址都可以,但没有任何结局。这是因为有例如WordPress的URL: - http://myblog.com/about-me – Briganti 2011-04-27 12:08:53

回答

1

不知道你使用的是什么语言,但如果你有一个网址列表已经正则表达式可能没有必要为这个。

在C#中,你可以做这样的事情:

string a = "http://example.com/index.php?p=Hey"; 
string b = a.Remove(a.IndexOfAny(new char[] {'?', '#'}, 0)); 
+0

你确实有一点..我使用PHP。我正考虑在一次旅行中检查URL的有效性,但上面的代码不会这样做,所以我可以试试看。 – Briganti 2011-04-27 12:18:35

1

这可能会做你想要什么:

​​

查询将包含您可能要忽略其它。

+0

几乎corect ..我想我忘了上面提到,我也需要扫描(这整个事情是为了一个小爬虫)只有像(HTML | PHP | /)或文件夹的某些页面。这就是问题发生的原因。 – Briganti 2011-04-27 12:19:49

+0

那么,你不能确定以'/ /结尾的URL还是没有任何特殊字符结尾的URL是否是一个文件夹。 'http:// example.com/about-me'可以是一个文件夹或一个文件,你不能告诉....大多数网络服务器处理文件夹路径时不会跟踪'/' – morja 2011-04-27 12:25:31

+0

实际上,在一个URL中,文件夹实际上并不存在。 Web服务器提供的所有内容都是文件,有些可能会列出其他文件,但在实际查看文件之前无法确定。 – morja 2011-04-27 12:33:34