我正在尝试从不应包含.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
而不是param=value
?
答案 0 :(得分:3)
你在做:
Pattern.compile("/test/(((?!\\.html).)+)\\?(.+)")
// ^^ ^ ^ ^ ^
// || | | | |
// |+------2-----+ | +-3+
// | |
// +-------1-------+
尝试:
Pattern.compile("/test/((?:(?!\\.html).)+)\\?(.+)")
// ^ ^ ^ ^
// | | | |
// | | +-2+
// | |
// +--------1--------+
换句话说:(?:...)
使其成为非捕获组。