Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式:找出嵌套模式和重复出现_Java_Regex_Nested - Fatal编程技术网

Java正则表达式:找出嵌套模式和重复出现

Java正则表达式:找出嵌套模式和重复出现,java,regex,nested,Java,Regex,Nested,我正在尝试分析具有以下模式的字符串: a2[u] 3[rst]5[g] 3[r2[g]] 我想将这些字符串提取到以下标记中: 2[u] 3[rst],5[g] 2[r,3[r2[g](嵌套组) 我正在使用以下模式和code: Pattern MY_PATTERN = Pattern.compile("(\\d+)\\[(.+)\\]"); String input = "3[rst]5[g]"; Matcher m = MY_PATTERN.mat

我正在尝试分析具有以下模式的字符串:

  • a2[u]
  • 3[rst]5[g]
  • 3[r2[g]]
我想将这些字符串提取到以下标记中:

  • 2[u]
  • 3[rst],5[g]
  • 2[r,3[r2[g]
    (嵌套组)
我正在使用以下
模式
code

Pattern MY_PATTERN = Pattern.compile("(\\d+)\\[(.+)\\]");
String input = "3[rst]5[g]";
Matcher m = MY_PATTERN.matcher(input);
while(m.find()) {
    System.out.println(m.group(1) + " " + m.group(2));
}

但是,它与上次出现的
]
匹配,而不是第一次,这会导致意外的结果。如果我将模式更改为
(\\d+\\\[(\\w+\\\]
,它可以工作,但在
3[r2[g]]
时失败。我需要做哪些更改,以便不将整个字符串计算为一个匹配项?

看起来您需要在匹配项中添加一个+


就目前情况而言。将吃掉整根绳子,然后只匹配最后一根]。添加一个不情愿的量词?将正则表达式设置为“.+”
(\\d+\\\[(.+?)\\\]
,然后查看您能达到的程度…

如果您计划匹配多于1的嵌套级别,正则表达式将变得非常笨拙。否则,请使用
“(\\d+\\\[([^\\]\[]*(?:\[^\\]\[]\[]*[^\\]\[]*)]””
。它有效吗?还是需要更多嵌套级别的支持?@Darshan:我建议不要为此使用正则表达式。最好使用令牌解析器,因为您处理的是嵌套括号。@WiktorStribiżew恐怕需要更多的嵌套级别。所以,我会按照anubhava的建议使用令牌解析器。不可能,lazy dot会匹配
3[r2[g]
中的
3[r2[g]
。好吧-那么regex不是答案