gpt4 book ai didi

java - 匹配直到完全停止

转载 作者:行者123 更新时间:2023-11-29 04:14:58 25 4
gpt4 key购买 nike

使用下面的正则表达式,我试图匹配两组,第一个是所有文本,直到达到句号,第二个是数字 0 或 1。

这是我正在尝试的正则表达式:"\\..+?(?=0|1)"

代码:

    final String regex = "\\..+?(?=0|1)";

final String string = "this is a test 123. 1";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
System.out.println(matcher.group(0));
}

打印:

如何改为匹配 this is a test 123. in group(0)1 in group(1) ?

最佳答案

您的模式 不符合您的要求。

这是您的 Pattern 现在解析的内容:

| literal dot
| | followed by any 1+ sequence reluctantly quantified
| | | followed by non-capturing 1 or 2
| | |
\\..+?(?=0|1)

根据定义,非捕获结构不能被反向引用(即您永远不能通过调用 Matcher#group 获取它们的值)。

这里有一个简单的例子来说明你想要什么:

String test = "this is a test 123. 1";
// | group 1: any 1+ char sequence reluctantly quantified,
// | | followed by a dot, non-capturing here
// | |
// | | | any character reluctantly quantified
// | | | (here, your whitespace)
// | | | | group 2: 1 or 2
Pattern p = Pattern.compile("(.+?)(?=\\.).*?([01])");
Matcher m = p.matcher(test);
if (m.find()) {
System.out.printf("Group 1: %s%nGroup 2: %s%n", m.group(1), m.group(2));
}

输出

Group 1: this is a test 123
Group 2: 1

注意事项

  • Group 0 始终代表整个比赛。
  • 换句话说,用户定义的编号组(由模式中括号中的内容定义)从索引 1 开始。
  • 参见组和捕获部分here .

  • 您对解析最终 0/1 数字的要求似乎有点宽松。你可能想问问自己这个数字是否会被“隔离”,例如被非字母字符包围,或者可能是更大数字序列的一部分,等等。

关于java - 匹配直到完全停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52987402/

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