Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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正则表达式的SQL查询_Java_Regex - Fatal编程技术网

解析文件包含带有Java正则表达式的SQL查询

解析文件包含带有Java正则表达式的SQL查询,java,regex,Java,Regex,Java正则表达式存在问题 文件包含以下格式的一些SQL查询: query_name_1 { any single line or multi line sql query } query_name_2 { any single line or multi line sql query } ... query_name_n { any single line or multi line sql query } 查询名称只能包含大写和小写字母、数字和下划线。SQL查询必须位于花

Java正则表达式存在问题

文件包含以下格式的一些SQL查询:

query_name_1 {
  any single line or multi line sql query
}

query_name_2 {
  any single line or multi line sql query
}

...

query_name_n {
  any single line or multi line sql query
}
查询名称只能包含大写和小写字母、数字和下划线。SQL查询必须位于花括号内,不应进行分析以进行验证。括号必须与查询名称在同一行或更低。查询必须用任何空格符号拆分

我试图使用下面的正则表达式,但没有成功

[a-zA-Z_]+(\s*|\n*)\{.*\}

请发表任何关于如何修复它的建议。

您可以使用regexp

Pattern.compile("query_name_[0-9]+.*?\{.*?\}",Pattern.DOTALL);

这结合了贪婪匹配和这样的事实。也将匹配新字符

首先,您在查询名称中遗漏了数字的用法,因此没有

[a-zA-Z_]
但是

另外,我为queryname和查询本身添加了一个组,并更正了一些换行符的位置。这是一个可以使用的regexp:

    ([a-zA-Z_0-9]+)\s*\{\n*((?:.|\n)+?)\}

    ([a-zA-Z_0-9]+)\s*\{\n*((?:.|\n)+?)\}