Java Lookahead正则表达式生成意外的组

Java Lookahead正则表达式生成意外的组,java,regex,Java,Regex,我正在尝试从不应包含.html 以下是Java中的示例代码: public class TestRegex { public static void main(String[] args) { Pattern pattern = Pattern.compile("/test/(((?!\\.html).)+)\\?(.+)"); Matcher matcher = pattern.matcher("/test/page?param=value");

我正在尝试从不应包含
.html

以下是Java中的示例代码:

public class TestRegex { 
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("/test/(((?!\\.html).)+)\\?(.+)");
        Matcher matcher = pattern.matcher("/test/page?param=value");
        System.out.println(matcher.matches());
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }
}
通过运行此代码,可以获得以下输出:

正确
页面
e

我的正则表达式有什么问题,所以第二组包含字母
e
,而不是
param=value

您正在做:

Pattern.compile("/test/(((?!\\.html).)+)\\?(.+)")
//                     ^^            ^ ^   ^  ^
//                     ||            | |   |  |
//                     |+------2-----+ |   +-3+
//                     |               |  
//                     +-------1-------+                  
尝试:

换句话说:
(?:…)
使其成为非捕获组

Pattern.compile("/test/((?:(?!\\.html).)+)\\?(.+)")
//                     ^                 ^   ^  ^
//                     |                 |   |  |
//                     |                 |   +-2+
//                     |                 |  
//                     +--------1--------+