我想使用Regex解析Java中的Insert Query。
以下是示例字符串
INSERT INTO table_name (c1,c2,c3) VALUES (abc,def,ghi) , (jkl,mno,pqr)
我想要以下输出:
Group1: table_name
Group2: c1,c2,c3
Group3: abc,def,ghi
Group4: jkl,mno,pqr
我尝试过以下正则表达式:
INSERT INTO ([A-Za-z][A-Za-z0-9_-]*) (?:\((.*)\))?\s*VALUES (\((,)?(.*)\))*
输出
Group1 : table_name
Group2 : c1,c2,c3
Group3 : (abc,def,ghi) , (jkl,mno,pqr)
Group4 : Empty
Group5 : abc,def,ghi) , (jkl,mno,pqr
请帮助我如何获得理想的结果。
答案 0 :(得分:2)
你可以试试这个正则表达式:
((?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+))|((?<=\\()(\\s*[\\w\\d_,]+\\s*)+(?=\\)))
说明:
(?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+)
在[\\w\\d_]+
和(INSERT\\sINTO\\s)
之间匹配\\s+
(?<=\\()(\\s*[\\w\\d_,]+\\s*)+(?=\\))
在[\\w\\d_,]+
和\\(
之间匹配\\)
以下是一个示例代码:
import java.util.regex.*;
public class HelloWorld {
public static void main(String []args){
String test = "INSERT INTO table_name (c1,c2,c3) VALUES (abc,def,ghi) , (jkl,mno,pqr)";
String regex = "((?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+))|((?<=\\()([\\w\\d_,]+)+(?=\\)))";
Pattern re = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = re.matcher(test);
while (m.find()) {
System.out.println(m.group(0));
}
}
}
输出如下:
table_name
c1,c2,c3
abc,def,ghi
jkl,mno,pqr
答案 1 :(得分:0)
对于查询的这个特定示例,以下正则表达式应该可以解决问题。
INSERT INTO (\S+) \((\S+)\) VALUES \((\S+)\) , \((\S+)\)
答案 2 :(得分:0)
检查是否可行
export const typedAction = (type: string, payload?: any) => {
return { type, payload };
}