【问题标题】:Is there a way to check if a regular expression represents a url有没有办法检查正则表达式是否代表 url
【发布时间】:2011-12-06 14:48:20
【问题描述】:

有没有办法检查一个正则表达式是否代表一个有效的 URL?比如说,正则表达式是Java字符串,有没有办法检查这些字符串是否代表一个有效的URL?

例如,说

String s1 = "/amazon\.com\//";
String s2 = "/google(\.[a-z]+)?\.[a-z]+\/search.*q=/i";
String s3 = "/.*/"; //Represents any URL
String s4 = "hello world";

s1、s2 和 s3 是表示 Urls 的有效正则表达式,但 s4 无效。

谢谢, 索尼

【问题讨论】:

  • 有趣..如果我正确理解了这个问题,你是在问一个正则表达式是否匹配另一个正则表达式匹配的子集......
  • 尽管有些浏览器可能会或可能不会处理 incomplete URI/URL,但根据定义,您的示例都不是有效的:scheme://domain:port/path?query_string#fragment_id 这说明了为什么不只是创建正则表达式模式以匹配您认为是“有效 URL”的任何内容?
  • 这个问题实际上是如何产生的!这些正则表达式来自哪里?例如用户?如果是,为什么?

标签: java regex url


【解决方案1】:

创建一个匹配特定 URL 的正则表达式很容易,但几乎不可能编写一个匹配 any 有效 URL 并且不匹配 any 无效的 URL。首先,您必须处理百分比编码以及关于何时可以/应该将其用于不同字符的规则。

我还应该指出,根据 URL 规范,您的示例中 none 是有效的 URL。


我的建议是使用 new URL(String)new URI(String) 检查无效的 URL,然后检查组件以执行细粒度匹配。

【讨论】:

    【解决方案2】:

    听起来帖子在询问如何确定给定的正则表达式是否匹配有效的 URL。不是那些特定的正则表达式示例是否与 URL 匹配。

    这可能可以概括为确定由给定正则表达式匹配的语言是否也可以由匹配所有 URL 的“规范”正则表达式匹配。上一个问题可能有一些用处:

    Does an algorithm exist which can determine whether one regular language matches any input another regular language matches?

    【讨论】:

      【解决方案3】:

      其中任何一个都应该匹配任何网址(假设这是您的问题,措辞有点神秘):

      String urlRegex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
      String regexUrl = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
      

      【讨论】:

        猜你喜欢
        • 2013-02-26
        • 2015-05-06
        • 2013-04-29
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多