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 に答える