Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于查找嵌套代码块的正则表达式_Java_Regex_String - Fatal编程技术网

Java 用于查找嵌套代码块的正则表达式

Java 用于查找嵌套代码块的正则表达式,java,regex,string,Java,Regex,String,我正在写一个代码格式化程序,我需要一些帮助。我必须找到代码块,我想使用正则表达式。我需要格式化的代码基本上如下所示: KEYWORD name { word word ... } ([A-Z]+?)\s+([A-Za-z0-9_+?)\s+\{(.*?)\} 我能够找到以{开头并以}结尾的块,使用以下表达式: [{](.*?)[}] 但是我不知道如何将“关键字名称”部分添加到表达式中。两者都是自定义字符串,可以包含除以外的任何字符,{和} 另一个问题是我的代码块可以

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

KEYWORD name {
    word
    word
    ...
}
([A-Z]+?)\s+([A-Za-z0-9_+?)\s+\{(.*?)\}
我能够找到以{开头并以}结尾的块,使用以下表达式:

[{](.*?)[}]
但是我不知道如何将
“关键字名称”
部分添加到表达式中。两者都是自定义字符串,可以包含除
以外的任何字符
{
}

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

您只需执行以下操作:

KEYWORD name {.*?}
由于您希望
也与换行符匹配,因此必须使用多行模式

因为
关键字
名称
都是可以包含除
以外的任何字符的任意字符串
{
}

[^;,{}]+\s+[^;,{}]+\s*{.*?}
您只需执行以下操作:

KEYWORD name {.*?}
由于您希望
也与换行符匹配,因此必须使用多行模式

因为
关键字
名称
都是可以包含除
以外的任何字符的任意字符串
{
}

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

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

如果关键字只能包含大写字母和
名称
,让我们假设所有字母、数字和下划线,它应该如下所示:

KEYWORD name {
    word
    word
    ...
}
([A-Z]+?)\s+([A-Za-z0-9_+?)\s+\{(.*?)\}
请注意,如果您的代码块可以嵌套,那么这个正则表达式将出现问题,因为它将同时匹配第一个{和第一个}。

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

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

如果关键字只能包含大写字母和
名称
,让我们假设所有字母、数字和下划线,它应该如下所示:

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

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

我不知道您的代码块是否可以嵌套,但是如果可以嵌套,您的正则表达式将无法工作。哦!你是对的!我还没有测试过。但它们必须嵌套…一旦涉及嵌套(任意深度),正则表达式就变得难以使用。严格来说,嵌套构造不是正则的,因此不适合与正则表达式匹配。一些现代正则表达式风格(例如PCRE、Perl、.NET)使递归匹配成为可能,但Java不在其中。因此,您可能需要为这项工作构建/使用解析器。。。我想你是对的。。。我必须自己做解析。。。谢谢我不知道你的代码块是否可以嵌套,但如果可以,你的正则表达式就不能工作了。哦!你是对的!我还没有测试过。但它们必须嵌套…一旦涉及嵌套(任意深度),正则表达式就变得难以使用。严格来说,嵌套构造不是正则的,因此不适合与正则表达式匹配。一些现代正则表达式风格(例如PCRE、Perl、.NET)使递归匹配成为可能,但Java不在其中。因此,您可能需要为这项工作构建/使用解析器。。。我想你是对的。。。我必须自己做解析。。。谢谢谢谢,它很有效。但这些块有时是嵌套的。我想我应该使用正则表达式来快速完成-(谢谢,它可以工作。但是块有时是嵌套的。我想我应该使用正则表达式来快速完成它…:-(