gpt4 book ai didi

Java 正则表达式,无法正确捕获最后一组

转载 作者:行者123 更新时间:2023-11-29 08:36:17 25 4
gpt4 key购买 nike

我正在尝试用 Java 正则表达式解析几行简单的代码:

[txt1] [txt2] [txt3] /some/long/path?params=1,2,3
[txt1] [txt2] [txt3] /path/
[txt1] [txt2] [txt3] /

我的正则表达式字符串是 ^\[(.*?)\]\[(.*?)\]\[(.*?)\] (/.*)(\?.*).

我正在努力捕获最后一组 - 使用我的正则表达式,只有第一行与模式匹配,但其他两行不匹配。如果我将正则表达式更改为 ^\[(.*?)\]\[(.*?)\]\[(.*?)\] (/.*)(\?.*)? 然后所有 3 行都匹配,但第一行没有成功捕获(我只得到 1 组 /some/long/path?params=1,2,3 而不是 2 /some/long/path?params=1,2,3).

如何编写此正则表达式,使所有行都有 5 个匹配组?

最佳答案

为了正确性和更好的性能,最好在正则表达式中使用否定字符类:

^\[([^]]*)\] \[([^]]*)\] \[([^]]*)\] (/[^?]*)(\?.*)?$

RegEx Demo

使用否定字符类,您不需要使用任何惰性量词,因为 [^?]* 将匹配 0 个或多个不是 ? 的字符

Code Demo

关于Java 正则表达式,无法正确捕获最后一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43915254/

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