gpt4 book ai didi

Java 6正则表达式一组的多个匹配项

转载 作者:搜寻专家 更新时间:2023-10-30 21:28:42 27 4
gpt4 key购买 nike

这是一个简单的模式:[key]: [value1] [value2] [value3] [valueN]

我想得到:

  1. 值数组

这是我的正则表达式:^([^:]+):(:? ([^ ]+))++$

这是我的文本:foo: a b c d

Matcher 给了我 2 个组:foo(作为键)和 d(作为值)。

如果我使用 +? 而不是 ++,我会得到 a,而不是 d

所以 java 返回我第一次(或最后一次)出现的组。

我不能在这里使用 find() 因为只有 一个 匹配。

除了将正则表达式拆分为两部分并对值数组使用查找之外,我还能做什么?我在许多其他环境中使用过正则表达式,几乎所有环境都能够获取“第 1 组的第一次出现”、“第 1 组的第二次出现”等。

如何在 JDK6 中使用 java.util.regex

谢谢。

最佳答案

匹配组的总数不取决于目标字符串("foo: a b c d",在您的例子中),而是取决于模式。你的模式总是有 3 组:

^([^:]+):(:? ([^ ]+))++$
^ ^ ^
| | |
1 2 3

第 1st 组将保存您的 key ,而第 2nd 组与第 3 组匹配,但包含一个空格,将始终只保存1 你的值(value)观。这是第一个值(在非贪婪 +? 的情况下)或最后一个值(在贪婪匹配的情况下)。

你可以做的只是匹配:

^([^:]+):\s*(.*)$

所以你有以下匹配项:

- group(1) = "foo"
- group(2) = "a b c d"

然后将第 2 个nd 组拆分为空白以获得所有值:

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
public static void main (String[] args) throws Exception {
Matcher m = Pattern.compile("^([^:]+):\\s*(.*)$").matcher("foo: a b c d");
if(m.find()) {
String key = m.group(1);
String[] values = m.group(2).split("\\s+");
System.out.printf("key=%s, values=%s", key, Arrays.toString(values));
}
}
}

将打印:

key=foo, values=[a, b, c, d]

关于Java 6正则表达式一组的多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215059/

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