java正则获取sql表名_如何提取SQL语句中的表名

如果不带别名的话,可以就正则实现.

不过java的正则有些限制,所以对于from中多于10张表的就有问题了,不多可以自己在添加,考虑不是很完善

Stringstr="INSERTINTOA\n"+"SELECTB.B1,B.B2,C.C1,C.C2\n"+"FROMBINNERJOINCONB.B0=C.C0\n"+"WHEREB.B0IN(SELECTD0FROMD,E,G,HWHERED.D1=E.E1)\n";Patternp=Pattern.compile("(?i)(?<=(?:from|into|update|join)\\s{1,1000}"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"//重复这里,可以多个from后面的表+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+"(?:\\w{1,1000}(?:\\s{0,1000},\\s{0,1000})?)?"+")(\\w+)");Matcherm=p.matcher(str);Listtables=newArrayList();while(m.find()){tables.add(m.group());}System.out.println(tables);

不过像楼上说的,最好还是自己写个sql解析器,可以采用javacc或者antlr来写,会容易些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值