我试图创建两个正则表达式来匹配URI。这些URI的格式为:/foo/someVariableData
和/foo/someVariableData/bar/someOtherVariableData
我需要两个正则表达式,每个正则表达式只匹配其中一个。
我最初想出的正则表达式是:/foo/.+
和 /foo/.+/bar/.+
。
我认为第二个正则表达式没问题,它只匹配第二个字符串。然而,第一个正则表达式会同时匹配两个字符串。因此,我开始尝试使用负向先行断言(negative lookahead)。我设计了正则表达式/foo/.+(?!bar)
并设置以下代码进行测试:
public static void main(String[] args) {
String shouldWork = "/foo/abc123doremi";
String shouldntWork = "/foo/abc123doremi/bar/def456fasola";
String regex = "/foo/.+(?!bar)";
System.out.println("ShouldWork: " + shouldWork.matches(regex));
System.out.println("ShouldntWork: " + shouldntWork.matches(regex));
}
当然,它们两个都解析为true
。
有人知道我做错了什么吗?我不一定需要使用负向先行断言,我只需要解决这个问题,而我认为负向先行断言可能是一种方法。
谢谢,
.*
在负向先行断言表达式(?!.*bar)
中的位置非常关键,而不是在外面.*(?!bar)
。谢谢。 - Gary