如何正确使用嵌套字符串

时间:2014-12-08 17:51:09

标签: java regex match

我的程序试图以递归方式匹配花括号包围的字符串 - 即,当给定{example1 {example2}} {example3} {example4}时,它将匹配example1 {example2}example3example4。我尝试使用\{.+\},但这将匹配example1 {example2}} {example3} {example4\{.+?\}匹配example1 {example2example3example4。有一种简单的方法可以用正则表达式做我想要的,或者简单地用Java做什么?你可能会说,我对正则表达式并不十分精通。

1 个答案:

答案 0 :(得分:3)

正则表达式解析需要状态的东西并不好。 你可能会想出一些在某些有限场景下工作的东西,但不是一个可以处理通用案例的好的正则表达式。

最好只显式解析字符串。基本上,逐个扫描字符,并且:

  • 如果char为{则增加“嵌套计数器”。如果是nesting counter==1,请启动一个新组,然后跳到下一个字符;

  • 如果char为},请减少计数器。如果nesting_counter == 0,则结束当前组,并跳至下一个字符;

  • 如果nesting_counter>0将当前字符附加到该组并继续;