gpt4 book ai didi

java - 前瞻性正则表达式产生意外组

转载 作者:行者123 更新时间:2023-11-29 06:21:12 25 4
gpt4 key购买 nike

我正在尝试从不应包含 .html 的 URL 中提取页面名称和查询字符串

这是 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));
}
}

运行这段代码可以得到如下输出:

true
page
e

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

最佳答案

你在做:

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

尝试:

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

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

关于java - 前瞻性正则表达式产生意外组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com