正则表达式分析sql代码的问题

kingssq 2008-04-23 04:50:32
我想找到不在括号里面的from,也就是非嵌套查询里面的from,比如可能的sql如下:
select t,((asdf from asdfasdf as)from(aaa)) from aaa where adf = (select id from adff)
我想得到红色部分的from。
...全文
459 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyzhx 2008-04-24
  • 打赏
  • 举报
回复
mark
haoxiongok 2008-04-24
  • 打赏
  • 举报
回复
要分,呵呵
kingssq 2008-04-24
  • 打赏
  • 举报
回复
算了,没有办法了,用java写个方法算了。。。
结贴,感谢大家。
kevinchj 2008-04-24
  • 打赏
  • 举报
回复
^……
来晚了……
haoxiongok 2008-04-24
  • 打赏
  • 举报
回复
帮楼主顶下
scgjq 2008-04-24
  • 打赏
  • 举报
回复
***************************************************************************

思想决定行动,加入程序员在深圳QQ群,参加技术思想碰撞

专业分类:
程序员在深圳JAVA群4247660
程序员在深圳c++群15195967
程序员在深圳.NET群Ⅱ:12203296
程序员在深圳TCP/IP协议栈开发:16956462
程序员在深圳JS & AJAX群:12578377
程序员在深圳英语学习群:23864353
深序员在深圳VB:11055959
程序员在深圳c++Ⅱ17409451
程序员在深圳c++群15195967
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422

不限专业分类:
高级群:17538442
第三群:2650485
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807

深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达二千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入式操作系统),还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪6K以下的别加入) c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660
——————————————————————————————————————————
希望大家不要认为群能给你带来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。

*****************************************************************************
scgjq 2008-04-24
  • 打赏
  • 举报
回复
***************************************************************************

思想决定行动,加入程序员在深圳QQ群,参加技术思想碰撞

专业分类:
程序员在深圳JAVA群4247660
程序员在深圳c++群15195967
程序员在深圳.NET群Ⅱ:12203296
程序员在深圳TCP/IP协议栈开发:16956462
程序员在深圳JS & AJAX群:12578377
程序员在深圳英语学习群:23864353
深序员在深圳VB:11055959
程序员在深圳c++Ⅱ17409451
程序员在深圳c++群15195967
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422

不限专业分类:
高级群:17538442
第三群:2650485
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807

深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达二千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入式操作系统),还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪6K以下的别加入) c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660
——————————————————————————————————————————
希望大家不要认为群能给你带来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。

*****************************************************************************
kingssq 2008-04-24
  • 打赏
  • 举报
回复
还是有问题,郁闷。。。
name99_6 2008-04-24
  • 打赏
  • 举报
回复
关注....
kingssq 2008-04-24
  • 打赏
  • 举报
回复
我的最后正则表达式:
from(?!([^()]*(\([^()]*\)[^()]*)*\)))
kingssq 2008-04-24
  • 打赏
  • 举报
回复
因为这个正则要用到实际项目中去,所以想谨慎一点。。
kingssq 2008-04-24
  • 打赏
  • 举报
回复
搞了许久,我认为这里不需要用到递归,大家可能想复杂了。
我的思路是去找from后面括号的规律,即from后面的括号不能是这样一种情况:
右括号比左括号多一个
所以可以用(?!exp)来进行匹配。
右括号比左括号多一个的表达式: (\([^()]*\))*\)
所以符合要求的正则为:from(?!(\([^()]*\))*\))
我目前发现它似乎没有什么问题?希望大家帮忙提点意见,谢谢了。
云上飞翔 2008-04-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 joejoe1991 的回复:]
无限嵌套又怎么办哪?我认为正则表达式做不到。。
[/Quote]
答:
1)“无限嵌套,正则表达式做不到”,完全正确。不要再费心了。
2)但楼主的问题怎么解决呢?
  方法之一:楼主退一步,给出一个实用性限制:如:括号嵌套最多不超过30层(实用时,也许够用了),这时,正则表达式就能写了。
  方法之二:楼主必须要无限嵌套,那只能另外写程序了,还要程序也不复杂。

以上仅供你参考。
goodmrning 2008-04-23
  • 打赏
  • 举报
回复
顶上去.关注......
goodmrning 2008-04-23
  • 打赏
  • 举报
回复
顶上去.关注......
goodmrning 2008-04-23
  • 打赏
  • 举报
回复
顶上去.关注......
  • 打赏
  • 举报
回复
正则表达式不能处理嵌套结构的,这在正则表达式中是个规矩,而且这个规矩以后也不会改
变的。

由于 Java 的正则表达式不支持递归结构,除非知道嵌套的层数,根据嵌套的层数动态生成
表达式进行匹配,这样是比较复杂的。
kingssq 2008-04-23
  • 打赏
  • 举报
回复
真是没有办法吗?
在这里先谢谢各位了。
后天结贴吧,到时候还没有结果就认为是正则解决不了吧。。
joejoe1991 2008-04-23
  • 打赏
  • 举报
回复
无限嵌套又怎么办哪?我认为正则表达式做不到。。
kingssq 2008-04-23
  • 打赏
  • 举报
回复
如13楼所说,后面多套几层括号就不行了。
不过火老大的思路很清晰,让我不要考虑前面了。。
加载更多回复(15)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧