将网址中的所有正斜杠替换为一个斜杠

sku*_*mar 1 java regex string

我想用单个斜杠替换网址中的所有多个正斜杠。我尝试使用String replaceAll()regex,但它不起作用。

示例案例:

  1. https://localhost/app//page1 应该返回 https://localhost/app/page1
  2. https://localhost/app//page1//subpage1 应该返回 https://localhost/app/page1/subpage1
  3. //page1//subpage1 应该返回 /page1/subpag1

Fed*_*zza 5

您可以像这样使用带有lookbehind的正则表达式:

(?<!https:)\/\/
Run Code Online (Sandbox Code Playgroud)

//仅当https:之前不存在时才会删除。

工作演示

在此处输入图片说明

你可以使用这个java代码:

String url = "https://localhost/app//page1".replaceAll("(?<!https:)\\/\\/", "/");
System.out.println(url);
Run Code Online (Sandbox Code Playgroud)


Ken*_*ter 5

您不需要为此推出自己的解决方案。Java提供了可用于URI和URL的类。

import java.net.URI;
import java.net.URISyntaxException;

public class URLTest {
    private static final String VICTIM = "https://localhost/app//page1//subpage1";
    public static void main(String[] args) throws URISyntaxException {
        URI uri = new URI(VICTIM);
        System.out.println("before: " + uri);
        uri = uri.normalize();
        System.out.println("after:  " + uri);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

before: https://localhost/app//page1//subpage1
after:  https://localhost/app/page1/subpage1
Run Code Online (Sandbox Code Playgroud)