Java Regex替换:和/除了url中的域名到空格

问题描述 投票:1回答:2

我有一个长串,包括很多:/。它还包括网址。

我想将所有:/替换为url的域名(例如,http://example.com)到空白区域。

所以link:http://example.com/test/page.html将成为link http://example.com test page.html

我尝试了replaceAll("[://]", " "),但它也将:中的/http://example.com替换为白色空间。

java regex url
2个回答
3
投票

现在看起来你可能想要使用类似的东西:

url = url.replaceAll("(https?://[^/:]+)?[/:]", "$1 ")

$1代表来自第1组(https?://[^/:]+)的比赛,感谢?是可选的。

所以它会尝试找到任何/:并用空格替换它。如果在任何这些字符之前有http://address部分,它将被自己替换。


2
投票

由于您需要在一个上下文中保留一些模式并在另一个上下文中替换其他模式,因此您可以使用正则表达式来匹配和捕获URL(以及您想要“保护”的任何内容),并且只需匹配您需要删除的内容。然后,使用Matcher#appendReplacement()检查捕获是否发生,并相应地使用适当的替换。

正则表达式可以类似于(\\bhttps?://\\S*)|[:/],其中(\\bhttps?://)匹配并捕获到第1组http://https://[:/]匹配:/(将被替换为空格)。如果你需要“缩小”/s和:s,请使用[:/]+

这是一个示例代码:

String fileText = "http://example.com//foo/bar http://example.com//foo/bar  1: 2/";
String pattern = "(\\bhttps?://)|[:/]";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(fileText);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    if (m.group(1) != null)
        m.appendReplacement(sb, m.group(1));
    else
        m.appendReplacement(sb, " ");
}
m.appendTail(sb);
System.out.println(sb);
// => http://example.com  foo bar http://example.com  foo bar  1  2

Java demo

© www.soinside.com 2019 - 2024. All rights reserved.