读取并提取字符串中的多个SQL查询,并将它们存储在Java中的列表中
我只需要提取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
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'