0

哪些字符会阻止这种模式:

private static Map<String, String> parseMetadata(String metaString) {
    Map<String, String> metadata = new HashMap<String, String>();
    String[] metaParts = metaString.split(";");
    Pattern p = Pattern.compile("^([a-zA-Z]+)=\\'([^\\']*)\\'$");
    Matcher m;
    for (int i = 0; i < metaParts.length; i++) {
        m = p.matcher(metaParts[i]);
        if (m.find()) {
            metadata.put(((String) m.group(1)).trim(), ((String) m.group(2)).trim());
        }
    }

    return metadata;
}

我已经测试过,带有 ' 符号的字符串被阻止了,但我不希望这种情况发生。

4

1 回答 1

0

目前还不清楚你想要什么。

首先:'在正则表达式中没有特殊含义。因此,您的原始正则表达式可能是:

([a-zA-Z]+)='([^']*)'$

如果您要捕获带引号的单引号的字符串,前提是这些单引号用反斜杠引用,您可以使用此正则表达式:

([a-zA-Z]+)='([^']*(?:\\'[^']*)*)'$

在 Java 字符串中:

"([a-zA-Z]+)='([^']*(?:\\\\'[^']*)*)'$"
于 2013-07-13T20:22:11.697 回答