Java 正则表达式提取有效的Http或Https

Java 正则表达式提取有效的Http或Https,java,regex,Java,Regex,我目前在使用正则表达式提取URL时遇到一些问题 我希望我的正则表达式采用URL,例如: http://stackoverflow.com/questions/ask https://stackoverflow.com http://local:1000 https://local:1000 通过一些教程,我了解到这个正则表达式可以找到以上所有内容:^(http | https)\://.$,但是,它也需要http://local:1000;http://invalidhttp://khttp:

我目前在使用正则表达式提取URL时遇到一些问题

我希望我的正则表达式采用URL,例如:

http://stackoverflow.com/questions/ask
https://stackoverflow.com
http://local:1000
https://local:1000
通过一些教程,我了解到这个正则表达式可以找到以上所有内容:
^(http | https)\://.$
,但是,它也需要
http://local:1000;http://invalid
http://khttp://
作为一个字符串,而它根本不应该占用它

我知道我的表达式并不是为了排除这种情况而编写的,但我的问题是我想不出如何编写它,所以它会检查这种情况

非常感谢您的帮助

编辑:


从我的问题来看,似乎我可以消除我的问题,只要我能够实现一个检查,以确保在初始http://或https://之后的字符串中不出现“//”,关于如何实现有什么想法吗

很抱歉,这将通过Java完成


我还需要添加以下约束:一个字符串,如
http://local:80/test:90
由于端口重复而失败…我需要一个只允许两个总数的约束:一个有效字符串中的符号(一个在http/s之后)和一个在端口之前。

检查您的编程语言,看看它是否已经有解析器。例如,php具有parse_url()

,只有在字符串中首次出现后没有
://
时,才会生成匹配项

^https?:\/\/(?!.*:\/\/)\S+
请注意,试图从字符串中解析有效url非常复杂,请参见
,因此上述内容不会尝试这样做。
它将只匹配协议和以下非空格字符

在爪哇

Pattern reg = Pattern.compile("^https?:\\/\\/(?!.*:\\/\\/)\\S+");
Matcher m = reg.matcher("http://somesite.com"); 
if (m.find()) {
    System.out.println(m.group());
} else {
    System.out.println("No match");
}


这可能会根据编程语言/工具的不同而发生变化

是否要在不使用协议的情况下提取url?您好,如果字符串包含多个url,例如在我的regexYes中不应发现它是有效的,只要它不是另一个url就可以了。查看我的问题,似乎只要我能实现一个检查,以确保在初始http://或https://之后的字符串中不出现“//”,我就可以消除我的问题,关于如何实现,有什么想法吗?请阅读[regex]标记的描述:“请还包括一个指定您正在使用的编程语言或工具的标记。”似乎这就是我需要的,你知道如何在java中实现吗?@Greg。是的,这很好,但它假设您已经获得了url。迈克-谢谢,这很有效。有一个问题,如果我想在限制中添加字符串中的第二个冒号也会使其无效(例如:“),我该怎么做?@user2019260。如果你是指第三个冒号,你可以使用
^https?:\/\/(?!!:(.::\:\/\/))\\S+
这将不允许在
http://
之后的字符串中出现两个
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/