Java 字符串的正则表达式是什么

Java 字符串的正则表达式是什么,java,regex,Java,Regex,我有一些字符串如下: String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]"; 如何使用regex like(),(),()分割字符串以获得: tableName=hello 模式名=测试 columns=[column[name=h1,key=true],column[name=h2,key=false]] 列由至少可以

我有一些字符串如下:

String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";
如何使用regex like(),(),()分割字符串以获得:

  • tableName=hello
  • 模式名=测试
  • columns=[column[name=h1,key=true],column[name=h2,key=false]]

  • 列由至少可以出现一次的列组成。

    假设
    数据[
    和最后一个
    ]
    或多或少是固定的(例如,
    数据
    是一个变量),我们可以使用
    replaceAll(“^[^\\\]\[+\[\\\\]$”)
    删除这些值(所有不是
    [
    ]
    的值都使用
    [
    在开始处后面,在结束处有一个
    ]
    ),并使用以下方法解析其余部分:

    public static List<String> splitWithCommaOutsideBrackets(String input) {
        int BracketCount = 0;
        int start = 0;
        List<String> result = new ArrayList<>();
        for(int i=0; i<input.length(); i++) {
            switch(input.charAt(i)) {
            case ',':
                if(BracketCount == 0) {
                    result.add(input.substring(start, i).trim());// Trims the item!
                    start = i+1;
                }
                break;
            case '[':
                BracketCount++;
                break;
            case ']':
                BracketCount--;
                if(BracketCount < 0) 
                    return result; // The BracketCount shows the [ and ] number is unbalanced
                break;
            }
        }
        if (BracketCount > 0)
            return result; // Missing closing ]
        result.add(input.substring(start).trim()); // Trims the item!
        return result;
    }
    
    公共静态列表拆分,使用逗号外括号(字符串输入){
    int BracketCount=0;
    int start=0;
    列表结果=新建ArrayList();
    对于(int i=0;i 0)
    返回结果;//缺少结束符]
    result.add(input.substring(start.trim());//修剪项目!
    返回结果;
    }
    
    并将其用作

    String input = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";
    List<String> res = splitWithCommaOutsideBrackets(input.replaceAll("^[^\\]\\[]+\\[|\\]$",""));
    for (String t: res) {
        System.out.println(t); // Printing the results
    } 
    
    String input=“Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]”;
    List res=splitwithCommaOutside括号(input.replaceAll(“^[^\\]\[]+\[\\[\\\]$”,”);
    for(字符串t:res){
    System.out.println(t);//打印结果
    } 
    

    请参阅。

    首先,您的描述应该更清楚。
    假设字符串看起来像“Data[*,*,*]”,您可以通过正则表达式获取“Data[]”内的内容。现在有了“*,*,*”,String.split()是个好主意

    示例代码:

    String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true]]]";
    String regex = "^Data\\[(.+)\\]$";
    Matcher m = Pattern.compile(regex).matcher(str);
    if (m.find()) {
        if (m.group(1) != null) {
            String content = m.group(1);
            String[] split = content.split(",", 3);
            String tableName = split[0];
            String schemaName = split[1];
            String columns = split[2];
            System.out.println(tableName);
            System.out.println(schemaName);
            System.out.println(columns);
        }
    }
    
    结果:

    tableName=hello
    schemaName=test
    columns=[column[name=h1,key=true],column[name=h2,keys=false]]
    

    让我猜猜-Java?好吧,OP-question-history指向Python,但是
    String
    指向其他lang。。。。不清楚。在嵌套结构上使用正则表达式不是最好的主意。对,我错过了。。。这场比赛我总是输!:-(我使用的是java,@Rawing所说的应该是正确的。谢谢你的帮助。但我认为Wiktor Stribiżew的答案更通用,它可以适应任意数量的列,并且列可以以任意顺序出现在字符串中。如果另一个字符串有
    columns=[column[name=h1,key=true]]
    作为第一个参数,这种方法将失败。答案非常详细、通用,而且确实很有效。它可以适应各种情况。函数“SplitWithCommaOutside括号”确实表达了我想说的内容。谢谢!