RegEx用于查找嵌套代码块

时间:2010-11-19 09:23:42

标签: java regex string

我正在编写代码格式化程序,我需要一些帮助。我必须找到代码块,我想使用正则表达式。我需要格式化的代码看起来基本上是这样的:

KEYWORD name {
    word
    word
    ...
}

我可以使用以下表达式找到以{和end with}开头的块:

[{](.*?)[}]

但我不知道如何将"KEYWORD name"部分添加到表达式中。两者都是自定义字符串,可以包含除;{}之外的任何字符。

另一个问题是我的代码块可以嵌套。我不知道如何添加该功能。

2 个答案:

答案 0 :(得分:3)

你可以这样做:

KEYWORD name {.*?}

由于您希望.也匹配换行符,因此您必须使用多行模式。

由于KEYWORDname都是包含除; , {}之外的任何字符的任意字符串:

[^;,{}]+\s+[^;,{}]+\s*{.*?}

答案 1 :(得分:2)

(。+?)\ S +(。+?)\ S + {(。*?)}

这是:任何不是空格的东西,后跟一个或多个空格字符,后跟任何不是空格,一个或多个空格字符和代码块的东西。

如果KEYWORD只能包含大写字母和name,让我们说所有的字母,数字和下划线,它应该是这样的:

([A-Z]+?)\s+([A-Za-z0-9_+?)\s+\{(.*?)\}

请注意,如果您的代码块可以嵌套,那么这个正则表达式会遇到问题,因为它会匹配第一个{以及第一个}。