String sql= "select a,b,c from A1 a1,B2 as a2 on a1.a = a2.b where d = select b from CC"; 我想把表名A1 ,B2 ,CC,从字符串sql中提取出来,请问有什么好的方法吗?

解决方案 »

  1.   

    import java.util.regex.*;public class Test {  
       public static void main(String[] args) throws IOException {  
        String sql= "select a,b,c from A1 a1,B2 as a2 on a1.a = a2.b where d = select b from CC";  
        Pattern  p = Pattern.compile("((?<=from)( \\w+)|(\\w+ )(?=as))",Pattern.CASE_INSENSITIVE); 
        Matcher m = p.matcher(sql); 
        while(m.find()){ 
              System.out.println(m.group(1).trim()); 
           } 
       
      }      

      

  2.   


    报了下面的异常 
    Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 3
    ((? <=from)( \w+) ?(\w+ )(?=as))
       ^
    at java.util.regex.Pattern.error(Pattern.java:1578)
    at java.util.regex.Pattern.group0(Pattern.java:2337)
    at java.util.regex.Pattern.sequence(Pattern.java:1623)
    at java.util.regex.Pattern.expr(Pattern.java:1595)
    at java.util.regex.Pattern.group0(Pattern.java:2347)
    at java.util.regex.Pattern.sequence(Pattern.java:1623)
    at java.util.regex.Pattern.expr(Pattern.java:1595)
    at java.util.regex.Pattern.compile(Pattern.java:1328)
    at java.util.regex.Pattern.<init>(Pattern.java:1084)
    at java.util.regex.Pattern.compile(Pattern.java:833)
    at sql.TestExcel.main(TestExcel.java:46)
      

  3.   


    import java.util.regex.*; public class Test {   
       public static void main(String[] args) throws IOException {   
        String sql= "select a,b,c from A1 a1,B2 as a2 on a1.a = a2.b where d = select b from CC";   
        Pattern  p = Pattern.compile("((?<=from)( \\w+) |(\\w+ )(?=as))",Pattern.CASE_INSENSITIVE);  
        Matcher m = p.matcher(sql);  
        while(m.find()){  
              System.out.println(m.group(1).trim());  
           }  
        
      }       
    在我这里运行得好好的,怎么会报错呢?
    你直接把代码复制过去~~~
      

  4.   

    运行的结果是
    A1
    B2
    没有CC啊