java 用于URL路径匹配的逆正则表达式

7xzttuei  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(140)

我需要配置一个反向标准的网址匹配模式。

/endpoint/300[0-9]+ -> These should not match and everything else should match.

我正在尝试用\/endpoint\/(?!^300)\d+进行负面回顾,但效果不太好。有人能解释一下我错过了什么吗?

bvn4nwqk

bvn4nwqk1#

只需对所有可能的值求反:

public static void main(String[] args) {
    String pattern = "/endpoint/(?:3|[^3].*|30|3[^0].*|300|30[^0].*|300[^0-9].*)";
    Stream.of(
        "/endpoint/asdf",
        "/endpoint/3008",
        "/endpoint/300b",
        "/endpoint/30",
        "/endpoint/3",
        "/endpoint/2999"
    ).forEach(it -> {
        System.out.println(it + " -> " + it.matches(pattern));
    });
}

标准输出:

/endpoint/asdf -> true
/endpoint/3008 -> false
/endpoint/300b -> true
/endpoint/30 -> true
/endpoint/3 -> true
/endpoint/2999 -> true

然而,如果你需要否定"/endpoint/"部分太-坏消息,你将需要否定它同样的方式。

相关问题