有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式查找嵌套代码块

我正在写一个代码格式化程序,我需要一些帮助。我必须找到代码块,我想使用正则表达式。我需要格式化的代码基本上如下所示:

KEYWORD name {
    word
    word
    ...
}

我可以用这个表达式找到以{开头,以}结尾的块:

[{](.*?)[}]

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

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


共 (2) 个答案

  1. # 1 楼答案

    你可以这样做:

    KEYWORD name {.*?}
    

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

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

    [^;,{}]+\s+[^;,{}]+\s*{.*?}
    
  2. # 2 楼答案

    (.+?)\s+(.+?)\s+{(.*?}

    这是:任何不是空格的字符,后跟一个或多个空格字符,后跟任何不是空格的字符,一个或多个空格字符,以及代码块

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

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

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