如何将 url 的双斜杠替换为单斜杠正则表达式是正确的方法吗?java.net.URI.normalize()正则表达式
对于给定的url,如“http://google.com//view/All/builds”,我想用单斜杠替换双斜杠。例如,上面的网址应显示为“http://google.com/view/All/builds"
我不知道正则表达式。任何人都可以帮助我,我如何使用正则表达式来实现这一点。
对于给定的url,如“http://google.com//view/All/builds”,我想用单斜杠替换双斜杠。例如,上面的网址应显示为“http://google.com/view/All/builds"
我不知道正则表达式。任何人都可以帮助我,我如何使用正则表达式来实现这一点。
为避免替换第一个 //,请使用以下正则表达式:http://
String to = from.replaceAll("(?<!http:)//", "/");
PS:如果您想处理https,请使用。(?<!(http:|https:))//
如果您希望将此解决方案作为练习的一部分,以提高您的正则表达式技能,那么很好。但是,您真正想要实现的目标是什么?您可能正在尝试规范化网址。替换为是规范化 URL 的一个方面。但是其他方面呢,例如删除冗余和折叠其父目录?那么不同的协议呢?怎么样?那么一开始呢?如果是,则在开始时呢?//
/
./
../
///
//
///
file:///
如果你想编写一段通用的、可重用的代码,使用正则表达式可能不是最好的选择。它正在重新发明轮子。相反,请考虑 。java.net.URI.normalize()
java.net.URI.normalize()
java.lang.String
String inputUrl = "http://localhost:1234//foo//bar//buzz";
String normalizedUrl = new URI(inputUrl).normalize().toString();
java.net.URL
URL inputUrl = new URL("http://localhost:1234//foo//bar//buzz");
URL normalizedUrl = inputUrl.toURI().normalize().toURL();
java.net.URI
URI inputUri = new URI("http://localhost:1234//foo//bar//buzz");
URI normalizedUri = inputUri.normalize();
如果您确实想使用正则表达式,请考虑所有可能性。如果将来这还应该处理其他协议,如 、 、 、 等,该怎么办?因此,请再想一想,并可能使用.但是如果你坚持使用正则表达式,也许可以使用这个:https
file
ftp
fish
URI.normalize()
String noramlizedUri = uri.replaceAll("(?<!\\w+:/?)//+", "/");
与其他解决方案相比,这适用于所有看起来与HTTP URL相似的URL,只是具有不同的协议,而不是,如,等,并且在的情况下它将保留三斜杠。但是,与 不同,这不会删除冗余,它不会与它们的父目录一起折叠,它不会折叠您和我可能已经忘记的URL规范化的其他方面,并且它不会使用有关URL,URI等的较新的RFC自动更新。http
https
file
ftp
///
file:///
java.net.URI.normalize()
./
../