2016-12-07 5 views

答えて

2

これは、あなたの入力文字列にはエスケープシーケンスを持っていない場合に動作します。

あなたは、あなたがを交換するために必要なものへの代替をスキップして追加する必要があるものと一致する「ラッパー」正規表現を作成し、キャプチャことがあります。しかし、最初の\{\{が文字列の最初の{{と一致するため、正規表現は{{{a}}と完全に一致するため、正規表現は適切ではありません。怠惰なドットマッチングを無効文字クラス[^{}]*に置き換えて、{}以外の0個の文字にのみ一致させる必要があります。

それからちょうどMatcher#appendReplacementを使用します。

String s = "{{{abc}}"; 
StringBuffer result = new StringBuffer(); 
Matcher m = Pattern.compile("(\\{\\{[^{}]*}})|[{}]").matcher(s); 
while (m.find()) { 
    if (m.group(1) != null) { 
     m.appendReplacement(result, m.group(1)); 
    } else { 
     m.appendReplacement(result, "\\\\" + m.group()); 
    } 
} 
m.appendTail(result); 
System.out.println(result.toString()); // Demo output. 

あなたは `\ {\ {[^ {}] *}}`パターンに一致しないものを括弧をエスケープしたいことを意味しJava demo

0

正規表現は次のようになります。

\{\{[^{}]+\}\} 
関連する問題