【问题标题】:Regular expression to match a URL with 6 or more levels正则表达式匹配具有 6 个或更多级别的 URL
【发布时间】:2013-03-19 16:41:35
【问题描述】:

我正在尝试匹配具有 6 个或超过 6 个级别或子路径的 URL

http://www.domain.com/level1/level2/level3/level4/level5/level6/level7/level8/level9/level10/level11/level12.html

我想出了一个表达方式

^http:\/\/([a-zA-Z\.-]*)\W(\b\w+\b) 

...匹配级别 1 (demo)

但是,当我尝试匹配具有六个或更多级别的 URL 时,它似乎不起作用。

^http:\/\/([a-zA-Z\.-]*)\W(\b\w+\b){6,}

(demo)

【问题讨论】:

  • 哪种语言?你想要单独的所有级别还是只想检查如果网址包含超过6个级别
  • 很抱歉不清楚。我想检查 url 是否包含超过 6 个级别

标签: java regex nutch


【解决方案1】:

尝试以下方法:

^http:\/\/([a-zA-Z\.-]*)(\/[\w\.]+){6,}

http://rubular.com/r/QZlidUqheq

【讨论】:

  • 谢谢。它回答了我的问题
【解决方案2】:

我认为这就是你想要的:

^http://([a-zA-Z.-]+)/(?:[^/]+/){6,}.*$

这匹配六个或更多级别,这就是您在问题中所说的想要的。但是,在问题的标题中,您将其表述为“超过六个”。如果这是您真正想要的,请将量词从 {6,} 更改为 {7,}

附带说明,正斜杠 (/) 在正则表达式中没有特殊含义,不需要转义。 Rubular 强制您转义斜杠,因为它用作正则表达式分隔符。 Nutch 使用 Java 的内置正则表达式,因此您应该使用相同风格的测试器,例如 this one

【讨论】:

  • 谢谢艾伦。我的问题令人困惑,所以我根据您的建议编辑了我的标题。另外,感谢关​​于正斜杠的说明。我没有意识到 rubular 使用正斜杠作为正则表达式分隔符。是的,我知道正确的正则表达式背后的意图是在 nutch crawl 中过滤我的 regex-urlfilter 文件中具有 6 个或更多级别的 url。
  • 您提供的表达式与 url 'domain.com/level1/level2/level3/level4/level5/level6/level7/…' 不匹配,尽管它有 6 个及以上级别
  • 我知道它不会占用整个 URL,你是这个意思吗?我在考虑grep,它总是返回匹配发生的整行(默认情况下,无论如何)。但是现在我想起来了,该软件可能希望正则表达式匹配整个 URL。我将更新答案并将.*$ 添加到正则表达式中。
  • 谢谢艾伦。我想这就是 nutch 中的 regex-urlfilter 匹配/过滤 url 的方式。我是使用 nutch 和常规 exp 的初学者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多