有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于特殊字符的java子串

我必须从sql中获取表名和列名。为此,我基于空间从子句数据中分离出来,并将所有元素存储在一个列表中,但现在有些列具有方法调用或其他一些验证

对于某些列:

  • max(TableName1.ColumnName1)-->TableName1.ColumnName1
  • concat('Q',TableName2.ColumnName2)}-->TableName2.ColumnName2
  • left(convert(varchar(90),TableName3.ColumnName3),1)})-->TableName3.ColumnName3

现在我验证具有的字符串
这里我只有一个提示,即()基于此,我必须得到特殊字符之前的左右字符串

可能会得到特殊字符,比如,()


共 (1) 个答案

  1. # 1 楼答案

    import java.util.*;
    import java.text.*;
    import java.util.regex.*;
    
    public class Parser {
    
        private static Pattern p = Pattern.compile("(?![\\(\\,])([^\\(\\)\\,]*\\.[^\\(\\)\\,]+)(?=[\\)\\,])");
    
        private static String getColumnName(String s) {
            Matcher m = p.matcher(s);
            while(m.find()) {
                return m.group(1);
            }
            return "";
        }
    
         public static void main(String []args) {
            String s1= "max(TableName1.ColumnName1)";
            System.out.println(getColumnName(s1));
    
            String s2= "concat('Q',TableName2.ColumnName2)}";
            System.out.println(getColumnName(s2));
    
            String s3= "left(convert(varchar(90),TableName3.ColumnName3),1)})";
            System.out.println(getColumnName(s3));
         }
    }
    

    输出:

    TableName1.ColumnName1                                                                                                                                                                                                                
    TableName2.ColumnName2                                                                                                                                                                                                                
    TableName3.ColumnName3