J’ai besoin de remplacer
\\\s+\\$\\$ to $$
j’ai utilisé
Ssortingng s = " $$"; s = s.replaceAll("\\s+\\$\\$","$$");
mais il jette une exception
java.lang.IllegalArgumentException: référence de groupe illégale
Utilisez "\\$\\$"
dans le deuxième paramètre:
Ssortingng s=" $$"; s=s.replaceAll("\\s+\\$\\$","\\$\\$"); //or //s=s.replaceAll("\\s+\\Q$$\\E","\\$\\$");
Le symbole de groupe $
est dans le paramètre de remplacement de regex
Donc, vous devez y échapper
De Ssortingng # replaceTous les javadoc :
Notez que les barres obliques inverses (\) et les signes dollar ($) dans la chaîne de remplacement peuvent entraîner une différence entre les résultats et le traitement en tant que chaîne de remplacement littérale. voir Matcher.replaceAll. Utilisez Matcher.quoteReplacement (java.lang.Ssortingng) pour supprimer la signification particulière de ces caractères, si vous le souhaitez.
Il est donc possible d’échapper à une chaîne de remplacement arbitraire à l’aide de Matcher # quoteReplacement :
Ssortingng s = " $$"; s = s.replaceAll("\\s+\\$\\$", Matcher.quoteReplacement("$$"));
Échapper aussi au motif peut être fait avec le motif # quote
Ssortingng s = " $$"; s = s.replaceAll("\\s+" + Pattern.quote("$$"), Matcher.quoteReplacement("$$"));
Le problème ici n’est pas l’expression régulière, mais le remplacement:
$ est utilisé pour faire référence à ()
groupes correspondants. Vous devez donc y échapper aussi bien avec une barre oblique inverse (et une seconde barre oblique inverse pour rendre le compilateur Java heureux):
Ssortingng s=" $$"; s = s.replaceAll("\\s+\\$\\$", "\\$\\$");
C’est le bon chemin. Remplacez le littéral $ par escaped \\ $ str.replaceAll("\\$", "\\\\\\$")
$
a une signification particulière dans la chaîne de remplacement ainsi que dans l’expression régulière, vous devez donc y échapper aussi:
s=s.replaceAll("\\s+\\$\\$", "\\$\\$");
Ssortingng s="$$"; s=s.replaceAll("\\s+\\$\\$","$$");
J’ai eu le même problème, donc je finis par mettre en œuvre tous les remplacer par un split.
Il a résolu l’exception pour moi
public static Ssortingng replaceAll(Ssortingng source, Ssortingng key, Ssortingng value){ Ssortingng[] split = source.split(Pattern.quote(key)); SsortingngBuilder builder = new SsortingngBuilder(); builder.append(split[0]); for (int i = 1; i < split.length; i++) { builder.append(value); builder.append(split[i]); } while (source.endsWith(key)) { builder.append(value); source = source.substring(0, source.length() - key.length()); } return builder.toString(); }