我想使用Regex解析Java中的插入查询。
以下是示例字符串
插入表名称(c1,c2,c3)值(abc,def,ghi),(jkl,mno,pqr)
我想要以下输出:
Group1: table_name Group2: c1,c2,c3 Group3: abc,def,ghi Group4: jkl,mno,pqr
我已经尝试过以下正则表达式:
插入([[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
请帮助我如何获得期望的结果。
您可以尝试以下正则表达式:
((?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+))|((?<=\\()(\\s*[\\w\\d_,]+\\s*)+(?=\\)))
解释:
(?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+)比赛[\\w\\d_]+之间(INSERT\\sINTO\\s)和\\s+
(?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+)
[\\w\\d_]+
(INSERT\\sINTO\\s)
\\s+
(?<=\\()(\\s*[\\w\\d_,]+\\s*)+(?=\\))比赛[\\w\\d_,]+之间\\(和\\)
(?<=\\()(\\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