Perform a substitution on the regular expression.
// translate \1 to $(1) so that the Matcher will work
StringBuffer subst = new StringBuffer();
for (int i = 0; i < argument.length(); i++) {
char c = argument.charAt(i);
if (c == '$") {
subst.append('\\");
subst.append('$");
} else if (c == '\\") {
if (++i < argument.length()) {
c = argument.charAt(i);
int value = Character.digit(c, 10);
if (value > -1) {
subst.append("$").append(value);
} else {
subst.append(c);
}
} else {
// XXX - should throw an exception instead?
subst.append('\\");
}
} else {
subst.append(c);
}
}
argument = subst.toString();
int sOptions = getSubsOptions(options);
Pattern p = getCompiledPattern(options);
StringBuffer sb = new StringBuffer();
Matcher m = p.matcher(input);
if (RegexpUtil.hasFlag(sOptions, REPLACE_ALL)) {
sb.append(m.replaceAll(argument));
} else {
boolean res = m.find();
if (res) {
m.appendReplacement(sb, argument);
m.appendTail(sb);
} else {
sb.append(input);
}
}
return sb.toString();