RegEx读取未知多重性的多个参数

Gru*_*ber 5 java regex

我有点卡在正则表达式上.考虑以下代码:

    String regFlagMulti = "^(\\[([\\w=]*?)\\])*?$";
    String flagMulti = "[TestFlag=1000][TestFlagSecond=1000]";
    Matcher mFlagMulti = Pattern.compile(regFlagMulti).matcher(flagMulti);

    if(mFlagMulti.matches()){
        for(int i = 0; i <= mFlagMulti.groupCount(); i++){
            System.out.println(mFlagMulti.group(i));
        }
    }else{
        System.out.println("MultiFlag didn't match!");
    }
Run Code Online (Sandbox Code Playgroud)

我想要的是一个常规模式,它给我[]内的文字; 结果匹配对象的一组中的每一个.

重要提示:我不知道输入字符串中有多少[]个表达式!

对于上面的代码,它输出:

[TestFlag=1000][TestFlagSecond=1000]
[TestFlagSecond=1000]
TestFlagSecond=1000
Run Code Online (Sandbox Code Playgroud)

我不能让常规模式工作.有人有想法吗?

aio*_*obe 3

我想要的是一个常规模式,它可以为我提供 [ ] 内的文本;生成的 Matcher 对象组中的每个对象。

不幸的是,这不能通过 Java 正则表达式引擎来完成。在这里查看我的(类似)问题:


本组:

(\\[([\\w=]*?)\\])*
\________________/
Run Code Online (Sandbox Code Playgroud)

是组号 1,并且将始终包含该组的最后一个匹配项。


这是一个解决方案的建议,它还可以获取键/值:

String regFlagMulti = "(\\[(\\w*?)=(.*?)\\])";
String flagMulti = "[TestFlag=1000][TestFlagSecond=1000]";
Matcher mFlagMulti = Pattern.compile(regFlagMulti).matcher(flagMulti);

while (mFlagMulti.find()) {
    System.out.println("String: " + mFlagMulti.group(1));
    System.out.println("   key: " + mFlagMulti.group(2));
    System.out.println("   val: " + mFlagMulti.group(3));
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

输出:

String: [TestFlag=1000]
   key: TestFlag
   val: 1000

String: [TestFlagSecond=1000]
   key: TestFlagSecond
   val: 1000
Run Code Online (Sandbox Code Playgroud)