现有1正则表达式如下:
^select ?(?<topCmd>top \d+)? (?<select_list>.+?) from (?<table_source>.+?) ?(?<whereCmd>where .+?)? ?(?<groupByCmd>group by .+?)? ?(?<havingCmd>having .+?)? ?(?<orderByCmd>order by .+?)?$此表达式能对下面的sql语句进行有效的分组
select * from userdata where username='myname'
但无法对下面的sql语句进行有效的分组
select * from (select * from userdata where username like ('%name')) user where username='myname'求高手指点

解决方案 »

  1.   

    ^select?(?<topCmd>top\d+)?(?<select_list>.+?)from(?<table_source>.+?)?(?<whereCmd>(?:where)(?!.*?where.*).+?)??(?<groupByCmd> group by.+?)??(?<havingCmd> having.+?)??(?<orderByCmd>order by.+?)?$
    LZ看看是不是你要的结果
      

  2.   

    不是将select   *   from   userdata   where   username   like   ( '%name ')作为table_source?
    那你要什么?
      

  3.   

    主要问题是无法判断后面的where子句到底是属于<table_source>分组的呢还是属于<whereCmd>分组的
      

  4.   

    主要问题是无法判断后面的where子句到底是属于 <table_source> 分组的呢还是属于 <whereCmd> 分组的
    --------------分组不是命名了吗???
      

  5.   

    不是将select       *       from       userdata       where       username       like       (   '%name   ')作为table_source? 
    那你要什么?
    确实是想这样,不过你给的表达式将后面这个where   username= 'myname ' 也包括到了table_source中了呢
      

  6.   

    仅仅针对你的两个语句,我的个式子是能区分的,只是到子查询在where字句后面的时候不能区分
      

  7.   

    主要问题是无法判断后面的where子句到底是属于   <table_source>   分组的呢还是属于   <whereCmd>   分组的 
    -------------- 分组不是命名了吗???
    -------------- 我想 (select   *   from   userdata   where   username   like   ( '%name '))   user   这个分在table_source组
    where       username=   'myname   ' 这个在whereCmd组
      

  8.   

    不是将select               *               from               userdata               where               username               like               (       '%name       ')作为table_source?   
    那你要什么? 
    确实是想这样,不过你给的表达式将后面这个where       username=   'myname   '   也包括到了table_source中了呢 
    ---------------------------------------------------------------
    那我就不知道你是怎么抄上去的了
      

  9.   

    不是将select                               *                               from                               userdata                               where                               username                               like                               (               '%name               ')作为table_source?       
    那你要什么?   
    确实是想这样,不过你给的表达式将后面这个where               username=       'myname       '       也包括到了table_source中了呢   
    --------------------------------------------------------------- 
    那我就不知道你是怎么抄上去的了
    --------------------------------------------------------------- 那能说说思路么,我当然是ctrl+c ctrl+v这样抄上去的
      

  10.   

    (?:where)(?!.*?where.*)取代你上面的where,主要是选择了最后一个where ,所以我跟你说无法匹配子查询在where后面的情况
      

  11.   

    另外,如果是选择了最后一个where,那么下面这句也不能分对组啊
    select   *   from   (select   *   from   userdata   where   username   like   ( '%name ')) u   
    这个子查询可没在where后面呢:)