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

时间:2016-08-15 09:00:45

标签: java regex

我有一些字符串如下:

String str = "Data[tableName=hello,schemaName=test,columns=[column[name=h1,key=true],column[name=h2,keys=false]]]";

如何使用regex(如(),(),()来划分字符串以获取:

  1. 表名=你好
  2. SCHEMANAME =测试
  3. 列= [柱[名= H1,键=真],柱[名= H 2,=键假]]
  4. 列由列组成,至少可以出现一次。

2 个答案:

答案 0 :(得分:1)

假设Data[和上一个]或多或少是固定的(比如Data是一个变量),我们可能会使用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; } ,并使用以下方法解析其余部分:

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
} 

并将其用作

=INDEX(A:A,MATCH(F4,B:B,0))

请参阅Java demo

答案 1 :(得分:1)

首先,您的描述应该更清楚 假设String看起来像“Data [*,*,*]”,您可以通过regex表达式获取“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]]