Java的正则表达式模式匹配[]

时间:2017-11-30 11:14:26

标签: java regex

我有一个字符串输出,我需要匹配,我使用的是regex

String schemaName = "Amazon";
String test = "{\"data\": [], \"name\": \"Amazon\", \"title\": \"StoreDataConfig\"}";
String output= method("\\[\\]",schemaName);
Matcher n = Pattern.compile(output).matcher(test);
boolean available = n.find();
System.out.println(available);

我想验证相同并将正则表达式传递给上面提到的方法

private static String method(String data, String schemaName) throws IOException {
    System.out.println(data);
    return ("{\"data\": "  + data  + ", \"name\": " + "\"" + schemaName + "\"" + ", \"title\": \"StoreDataConfig\"}");
}

但我总是得到java.util.regex.PatternSyntaxException: Illegal repetition

你能让我知道这是什么错误吗?

如果我不使用[]的方法并直接给它,我没有收到错误

2 个答案:

答案 0 :(得分:1)

看起来你正在这样做:

  1. 使用有效的正则表达式匹配[]
  2. 将正则表达式嵌入一些JSON
  3. 尝试编译JSON-with-an-embedded-regex,好像整个批次都是有效的正则表达式。
  4. 失败了...因为JSON-with-an-embedded-regex不是有效的正则表达式。

    首先,{字符是正则表达式元字符。

    但真正的难题是......你到底想要做什么?

    如果你只是想要一个与文字字符串匹配的正则表达式,那么这就可以了。

       Pattern p = Pattern.compile(Pattern.quote(someLiteralString)).
    

    你可以使用Pattern.quote来转义子正则表达式和文字字符串,以转义文字部分然后连接。

    如果你最终要做的是使用模式匹配/正则表达式从JSON字符串中提取信息,那么......不要。更好的方法是使用适当的JSON解析器,并从JSON对象树中提取所需的信息。

答案 1 :(得分:0)

这是因为你需要像{}

那样转义"\\{"个字符