Java 非捕获组仍然显示?

Java 非捕获组仍然显示?,java,regex,url,Java,Regex,Url,我正在尝试获取url中从第三个/开始的字符串 以下是网址: http://192.168.1.253:18888/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png 我希望获得/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png 所以我使用了下面的正则表达式(?:\/\/.+)\/.+ ?:标记非捕获组,因此不应匹配//192.168.1.253:18888 但是当我在regex101.com

我正在尝试获取url中从第三个
/
开始的字符串

以下是网址:

http://192.168.1.253:18888/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png

我希望获得
/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png

所以我使用了下面的正则表达式
(?:\/\/.+)\/.+

?:
标记非捕获组,因此不应匹配
//192.168.1.253:18888

但是当我在regex101.com中测试时,它的结果是
/192.168.1.254:18888/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png


这是为什么?

regex101.com结果是
/192.168.1.254:18888/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png
的原因是非捕获组
(?:…)
使用它们匹配的文本。因此,在匹配文本的地方,Regex101将其显示为匹配

对于Java等语言,只需在初始双斜杠后匹配不包含正斜杠的所有内容,并仅保持组匹配:

Regex:`\/\/[^\/]+(.+)`
输入:`http://192.168.1.253:18888/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png`
忽略匹配1:`//192.168.1.253:18888/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png`
保留第1组:`/2021/03/11/896459e4-875f-455a-a2cb-768c879555e7.png`

非捕获组使用它们匹配的文本,它们不是lookbehind。您需要
(?或类似的内容。最好在您的语言中使用URL解析功能。请将您的编程语言添加到标记中-每种语言的Regex更改。您可以匹配
http://
直到第一个
/
,并捕获其余的
http://[^/]+(.+)
我对Java很熟悉,但是否有一个使用非捕获组的全局解决方案?我们必须为每种语言(如SQL)重新学习,这很痛苦。第二个代码块应该在某种程度上适用于大多数语言,但不幸的是,每种编程语言都有不同的正则表达式实现,因此不可能所有语言都是正则表达式ges将接受相同的解决方案。