有没有办法检查正则表达式是否代表网址

时间:2011-10-13 02:18:18

标签: java regex url

有没有办法检查正则表达式是否代表有效的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无效。

谢谢, 索尼

3 个答案:

答案 0 :(得分:1)

很容易创建一个与特定网址匹配的正则表达式,但几乎不可能编写一个匹配任何有效网址的网址,也不能匹配任何无效的网址。首先,您必须应对百分比编码以及何时可以/应该用于不同字符的规则。

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


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

答案 1 :(得分:0)

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

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+&@#/%=~_|]";

答案 2 :(得分:0)

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

这可能可以推广到确定给定正则表达式匹配的语言是否也可以与匹配所有URL的“规范”正则表达式匹配。之前的问题可能有一些用处:

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