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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Regex替换:和/除了url中的域名到空格相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

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

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

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

另一答案

由于您需要在一个上下文中保留一些模式并在另一个上下文中替换其他模式,因此您可以使用正则表达式来匹配和捕获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

以上是关于Java Regex替换:和/除了url中的域名到空格的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 [REGEX] - 替换/替换 - 捕获组 1 和 2 中的内容

如何使用Java replaceAll(regex,replacement)方法替换字符串中的所有方括号[重复]

用powershell中的regex替换子字符串

Java中Regex替换的自定义函数[关闭]

带有regex的ReplaceAll删除了Java不想删除的一个多余的字符

如何替换 url 参数?