我的程序试图以递归方式匹配花括号包围的字符串 - 即,当给定{example1 {example2}} {example3} {example4}
时,它将匹配example1 {example2}
,example3
和example4
。我尝试使用\{.+\}
,但这将匹配example1 {example2}} {example3} {example4
。 \{.+?\}
匹配example1 {example2
,example3
和example4
。有一种简单的方法可以用正则表达式做我想要的,或者简单地用Java做什么?你可能会说,我对正则表达式并不十分精通。
答案 0 :(得分:3)
正则表达式解析需要状态的东西并不好。 你可能会想出一些在某些有限场景下工作的东西,但不是一个可以处理通用案例的好的正则表达式。
最好只显式解析字符串。基本上,逐个扫描字符,并且:
如果char为{
则增加“嵌套计数器”。如果是nesting counter==1
,请启动一个新组,然后跳到下一个字符;
如果char为}
,请减少计数器。如果nesting_counter == 0
,则结束当前组,并跳至下一个字符;
如果nesting_counter>0
将当前字符附加到该组并继续;