我正在使用java作为我的程序
假设我有一个像这样的字符串
xx(yyzz(iijj))qq((kkll)(gghh))
我是否可以使用正则表达式单独匹配xx(yyzz(iijj))
和qq((kkll)(gghh))
?
答案 0 :(得分:7)
简单的答案是否定的,没有办法只使用正则表达式。只需遍历字符串并将打开的括号推到堆栈上即可。点击括号时弹出。如果您尝试弹出或完成并且堆栈不为空,则它无效。
您也可以通过删除'('和lastIndex of')'的第一个索引来递归地执行此操作,以验证索引'('小于''的索引')
答案 1 :(得分:4)
你可以使用正则表达式将嵌套括号匹配到固定级别。但超过2级将变得相当混乱(2已经是,坦白说)。这符合您的示例:
\(([^()]*+|\([^()]*+\))*\)
快速解释:
\( # match a '('
( # open group 1
[^()]*+ # match any chars other than '(' and ')'
| # OR
\([^()]*+\) # match '(...)'
)* # close group 1 and repeat it zero or more times
\) # match a '('
请参阅ideone.com
上的演示有一些正则表达式可以匹配任意数量的嵌套(Perl,.NET,PHP),但Java不是其中之一。
但是看看你在问题中发表的评论,我不会用正则表达式来处理这个问题,而是使用正确的解析器(无论是手工制作的解析器还是生成的解析器)。