SELECT 
        B.ARID_ITEM, B.ARIDT_IDFR, B.ARID_HOST_TS, B.ARID_LOCAL_TS, B.CRUD_VALUE, A.APA2_HOST_TS, 
        A.APA2_LOCAL_TS, A.APA_EFCTV_DATE, A.APRVL_VALUE, A.APALT_VALUE, A.CRNCY_IDFR ,case when VALUE(A.AABP_END_DATE, :TODAY) < :TODAY1 then NULL else A.AABP_AMT end as AABP_AMT ,CAST(:COLLECT_TS_TO AS TIMESTAMP) AS WK_LOCAL_TS
FROM 
        APD_AR A, AR_ID_RLTNP B 想把上面的SQL文中的B.*,和A.*的项目明字取出来,不要CAST(:COLLECT_TS_TO AS TIMESTAMP) AS WK_LOCAL_TS,不要
case when VALUE(A.AABP_END_DATE, :TODAY) < :TODAY1 then NULL else A.AABP_AMT end as AABP_AMT, 但要其中A.AABP_AMT 的,
还想把APD_AR A和AR_ID_RLTNP B也取出来,请问怎么用正则表达式

解决方案 »

  1.   

    刚学写正则表达式,不过速度很慢,有高手帮改一下吧
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class RegularExpression {
    public static void main(String[] args) {
            
            String str = "SELECT B.ARID_ITEM,  " +
                 "B.ARIDT_IDFR, " +
                 "B.ARID_HOST_TS, " +
                 "B.ARID_LOCAL_TS,   " + 
                 "B.CRUD_VALUE,   " + 
                 "A.APA2_HOST_TS," +   
                 "A.APA2_LOCAL_TS,   " + 
                 "A.APA_EFCTV_DATE,  " +
                 "A.APRVL_VALUE,   " + 
                 "A.APALT_VALUE,   " + 
                 "A.CRNCY_IDFR   , " +
                 "case   when   VALUE(" +
                 "A.AABP_END_DATE,   " +
                 ":TODAY)   <   :TODAY1   then   NULL   else   " +
                 "A.AABP_AMT   end   as   " +
                 "AABP_AMT   ,CAST(:COLLECT_TS_TO   AS   TIMESTAMP)   AS   " +
                 "WK_LOCAL_TS FROM APD_AR A, AR_ID_RLTNP B";
            
            String regex = "B\\.(\\w*).*B\\.(\\w*).*B\\.(\\w*).*B\\.(\\w*).*B\\.(\\w*)";
            
            
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            
            if(matcher.find())
             for (int i = 1; i <= matcher.groupCount(); i++){
             System.out.println(matcher.group(i));
             }
            System.out.println("******************");
            
            String regex1 = "A\\.(\\w*).*A\\.(\\w*).*A\\.(\\w*).*A\\.(\\w*).*A\\.(\\w*).*A\\.(\\w*).*A\\.(\\w*).*A\\.(\\w*)";
            Pattern pattern1 = Pattern.compile(regex1);
            Matcher matcher1 = pattern1.matcher(str);
            if(matcher1.find())
             for (int i = 1; i <= matcher1.groupCount(); i++){
             System.out.println(matcher1.group(i));
             }
            System.out.println("******************");
            
            String regex2 = "FROM (.*)";
            Pattern pattern2 = Pattern.compile(regex2);
            Matcher matcher2 = pattern2.matcher(str);
            if(matcher2.find())
             for (int i = 1; i <= matcher2.groupCount(); i++){
             System.out.println(matcher2.group(i));
             }
        }
    }
      

  2.   

    用的一楼的测试数据.
    String regex = "[AB][.]([^,\\s]+)";


    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);

    while(matcher.find())
    System.out.println(matcher.group(1));

    String[] tblName = (str.split("FROM"))[1].trim().split("(\\s+)?,(\\s+)?");
    for(int i=0;i<tblName.length;i++)
    System.out.println(tblName[i]);