Mam ciąg s
i wyrażenie regularne. Chciałbym zastąpić każdy mecz z regex w s
z ciągiem zastępującym. Zamienny ciąg może zawierać jeden lub więcej odwróconych ukośników. Aby wykonać zastępstwo, używam metody Matcher
's appendReplacement.Metoda appendReplacement Matchera ignoruje ukośniki odwrotne zastępcze
Problem z appendReplacement
polega na tym, że ignoruje wszystkie naprężenia występujące w łańcuchu zastępczym. Więc jeśli mogę spróbować wymienić podciąg "match"
w ciągu "one match"
z ciągiem zastępczym "a\\b"
, następnie appendReplacement
skutkuje "one ab"
zamiast "one a\\b"
*:
Matcher matcher = Pattern.compile("match").matcher("one match");
StringBuffer sb = new StringBuffer();
matcher.find();
matcher.appendReplacement(sb, "a\\b");
System.out.println(sb); // one ab
Brałem spojrzeć na appendReplacement
„s kodu, i okazało się, że pomija każdy napotkany ukośnik odwrotny:
if (nextChar == '\\') {
cursor++
nextChar = replacement.charAt(cursor);
...
}
Jak mogę zamienić każdy mecz na zastępczy łańcuch zawierający odwrócone ukośniki?
(*) - Należy zauważyć, że istnieje jeden odwrócony ukośnik w pozycji "a\\b"
, a nie dwie. Odwrotny ukośnik jest po prostu uciekł.
'" a "+" \ "+" b "' ???????? – vks
@vks: Jeśli pytasz, czy mój przykład zastępczego łańcucha to '" a "+" \ "+" b "', to tak, z tym że '" \ "' jest niedozwolonym ciągiem Java, ponieważ musisz uciec ukośnik wsteczny. – snakile
Właściwie to zapytałem, czy ta zamiana działa: P – vks