Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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
读取并提取字符串中的多个SQL查询,并将它们存储在Java中的列表中_Java_Regex - Fatal编程技术网

读取并提取字符串中的多个SQL查询,并将它们存储在Java中的列表中

读取并提取字符串中的多个SQL查询,并将它们存储在Java中的列表中,java,regex,Java,Regex,我只需要提取SQL查询(全部)并将它们存储在一个列表中,以便在Java中传递参数 这是示例输入字符串 section Section1; shared Data_first = let Source = Sourcename.Database("abc.net", [HierarchicalNavigation=true , Query=" SELECT Company_ , Corporate_ , Corporate_Name , Group_Name , Di

我只需要提取SQL查询(全部)并将它们存储在一个列表中,以便在Java中传递参数

这是示例输入字符串

section Section1; shared Data_first = let Source = Sourcename.Database("abc.net", [HierarchicalNavigation=true , Query=" SELECT Company_ , Corporate_ , Corporate_Name , Group_Name , Division_Name , Market_Name FROM Entity_table WHERE CODE = '12345' "]), in #"Renamed Columns"; shared Data_first = let Source = Sourcename.Database("abc.net", [HierarchicalNavigation=true , Query=" SELECT column1, column2 FROM table1, table2 WHERE column2='value'; "]), in #"Renamed Columns"; shared Data_first = let Source = Sourcename.Database("abc.net", [HierarchicalNavigation=true , Query="SELECT Company_ , Corporate_ , Corporate_Name , Group_Name , Division_Name , Market_Name FROM Entity_table_three WHERE CODE = '78901'"]), in #"Renamed Columns";
下面是我尝试过的代码,但它只获取第一个查询。我需要字符串中存在的所有查询。我不熟悉正则表达式,所以没有尝试过

public static String ReadBigStringIn(BufferedReader buffIn, String st) throws IOException {
    StringBuilder everything = new StringBuilder();
       
    StringBuilder lines = null ;
    while( (st = buffIn.readLine()) != null) {
        lines = everything.append(st);
    }
    String myQuery = lines.toString().substring(lines.toString().indexOf("Query"));
    System.out.println("myQuery: \n"+ myQuery);
    String query= substringBetween(myQuery, "Query=\"", "\"])");
    System.out.println("myQuery2: \n"+ query);
    return query;

提前谢谢

我将使用具有以下模式的Java正则表达式匹配器:

"\s*(SELECT.*?)\s*"

您的更新代码:

公共静态列表getAllQueries(BufferedReader in)引发IOException{
弦线;
StringBuffer行=新的StringBuilder();
列表查询=新建ArrayList();
而((line=in.readLine())!=null){
行.append(st.append(“\n”);
}
字符串模式=“\”\s*(选择。*?\s*\”;
Pattern p=Pattern.compile(Pattern);
Matcher m=r.Matcher(lines.toString());
while(m.find()){
添加(m.group(1));
}
返回查询;
}

我将使用具有以下模式的Java正则表达式匹配器:

"\s*(SELECT.*?)\s*"

您的更新代码:

公共静态列表getAllQueries(BufferedReader in)引发IOException{
弦线;
StringBuffer行=新的StringBuilder();
列表查询=新建ArrayList();
而((line=in.readLine())!=null){
行.append(st.append(“\n”);
}
字符串模式=“\”\s*(选择。*?\s*\”;
Pattern p=Pattern.compile(Pattern);
Matcher m=r.Matcher(lines.toString());
while(m.find()){
添加(m.group(1));
}
返回查询;
}

您可以使用正向前视和正向后视来捕获文本
Query=“
和下一个
之间的子字符串。使用此正则表达式:
(?您可以使用正向前视和正向后视来捕获文本
Query=“
和下一个
”之间的子字符串
使用此正则表达式:
(?
SELECT Company_ , Corporate_ , Corporate_Name , Group_Name , Division_Name , Market_Name FROM Entity_table WHERE CODE = '12345' 
SELECT column1, column2 FROM table1, table2 WHERE column2='value'; 
SELECT Company_ , Corporate_ , Corporate_Name , Group_Name , Division_Name , Market_Name FROM Entity_table_three WHERE CODE = '78901'