RegEx查找嵌套的代码块

问题描述:

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

KEYWORD name { 
    word 
    word 
    ... 
} 

我能够找到下手块{和结束}这个表达式:

[{](.*?)[}] 

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

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

+0

我不知道你的代码块是否可以嵌套,但如果是这样,你的正则表达式将不起作用。 – Jordi 2010-11-19 09:28:56

+0

哦!你是对的!我还没有测试过。但它们必须嵌套... – 2010-11-19 09:34:31

+0

只要涉及嵌套(到任意深度),正则表达式就变得很难使用。严格地说,嵌套结构不规则,因此不适合与正则表达式匹配。一些现代的正则表达式(例如,PCRE,Perl,.NET)使得递归匹配成为可能,但是Java不在其中。因此,您可能需要为此作业构建/使用解析器。 – 2010-11-19 10:01:16

你可以这样做:

KEYWORD name {.*?} 

既然你想.匹配换行符,以及你将不得不使用多行模式。

由于两个KEYWORDname是可以含有除了;,{}任何字符的任意字符串:(?+)

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

是啊!这工作正常! – 2010-11-19 09:33:53

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

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

如果关键字只能包含大写字母和name,假设所有的字母,数字和下划线,它应该是这样的:

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

请注意,如果你的代码块可以被嵌套,你”会有这个正则表达式的问题,因为它会匹配第一个{以及第一个}。

+0

谢谢,它的工作原理。但块有时嵌套。我想用正则表达式让它快速完成...... :-( – 2010-11-19 09:38:19