RegEx查找嵌套的代码块
我正在编写代码格式化程序,我需要一些帮助。我必须找到代码块,我想使用正则表达式。我需要的格式的代码基本上是这样的:RegEx查找嵌套的代码块
KEYWORD name {
word
word
...
}
我能够找到下手块{和结束}这个表达式:
[{](.*?)[}]
但我不知道如何将"KEYWORD name"
部分添加到表达式中。两者都是自定义字符串,可以包含除;
,{
和}
之外的任何字符。
另一个问题是我的代码块可以嵌套。我不知道如何添加该功能。
你可以这样做:
KEYWORD name {.*?}
既然你想.
匹配换行符,以及你将不得不使用多行模式。
由于两个KEYWORD
和name
是可以含有除了;
,
{
和}
任何字符的任意字符串:(?+)
[^;,{}]+\s+[^;,{}]+\s*{.*?}
是啊!这工作正常! – 2010-11-19 09:33:53
\ S + \ S + {(*(+。?)。? )}
这是:任何不是空格,后跟一个或多个空白字符,后面跟着不是空格的东西,一个或多个空白字符和您的代码块。
如果关键字只能包含大写字母和name
,假设所有的字母,数字和下划线,它应该是这样的:
([A-Z]+?)\s+([A-Za-z0-9_+?)\s+\{(.*?)\}
请注意,如果你的代码块可以被嵌套,你”会有这个正则表达式的问题,因为它会匹配第一个{以及第一个}。
谢谢,它的工作原理。但块有时嵌套。我想用正则表达式让它快速完成...... :-( – 2010-11-19 09:38:19
我不知道你的代码块是否可以嵌套,但如果是这样,你的正则表达式将不起作用。 – Jordi 2010-11-19 09:28:56
哦!你是对的!我还没有测试过。但它们必须嵌套... – 2010-11-19 09:34:31
只要涉及嵌套(到任意深度),正则表达式就变得很难使用。严格地说,嵌套结构不规则,因此不适合与正则表达式匹配。一些现代的正则表达式(例如,PCRE,Perl,.NET)使得递归匹配成为可能,但是Java不在其中。因此,您可能需要为此作业构建/使用解析器。 – 2010-11-19 10:01:16