【问题标题】:Java - Regex problemJava - 正则表达式问题
【发布时间】:2010-04-18 10:07:54
【问题描述】:

我有一个 URL 类型列表

  • http://www.example.com/pk/ca,
  • http://www.example.com/pk,
  • http://www.example.com/anthingcangoeshere/pk,和
  • http://www.example.com/pkisnotnecessaryhere

现在,我只想找出那些以/pk/pk/ 结尾并且在.com/pk 之间没有任何内容的网址

【问题讨论】:

  • 你的问题不是很清楚。给出更多你想要匹配和不想匹配的例子。
  • 还不清楚。 URL 是否必须包含.com
  • @Mark 是的,它应该包含.com
  • 也许你的意思是“URLs that's path is /pk or start with /pk/” or “URLs that's the first path segment is pk”?
  • 这是一个非常有用的学习正则表达式的页面:zytrax.com/tech/web/regex.htm

标签: java regex url


【解决方案1】:

您的问题尚未完全确定,因此我无法给您确切的答案,但这应该是您可以使用的开始:

^[^:]+://[^/]+\.com/pk/?$

这些字符串将匹配:

http://www.example.com/pk http://www.example.com/pk/ https://www.example.com/pk

这些字符串不匹配:

http://www.example.co.uk/pk http://www.example.com/pk/ca http://www.example.com/anthingcangoeshere/pk http://www.example.com/pkisnotnecessaryhere

【讨论】:

    【解决方案2】:
    String pattern = "^http://www.example.com/pk/?$";
    

    希望这会有所帮助。

    一些细节:如果您不将^ 添加到模式的开头,那么foobarhttp://www.example.com/pk/ 也将被接受。如果您不将$ 添加到模式的末尾,那么http://www.exampke.com/pk/foobar 也将被接受。

    【讨论】:

      【解决方案3】:

      直接翻译您的请求“[...] 以 /pk 或 /pk/ 结尾且在 .com 和 /pk 之间没有任何内容的 URL”,并附加假设始终存在“. com",产生这个正则表达式:

      如果你使用find()

      \.com/pk/?$
      

      如果你使用matches()

      .*\.com/pk/?
      

      此处给出的其他答案给出了更严格的模式,只允许更接近您的示例的 URL。特别是我的模式没有验证给定的字符串是语法上有效的 URL。

      【讨论】:

        【解决方案4】:
        String pattern = "^https?://(www\.)?.+\\.com/pk/?$";
        

        【讨论】:

          猜你喜欢
          • 2017-03-27
          • 1970-01-01
          • 2011-09-04
          • 2011-04-25
          • 2015-11-25
          • 1970-01-01
          相关资源
          最近更新 更多