preg_replace_callbackA quick implementation to have it at hand.
/**
* Substitute for PHP's preg_replace_callback().
*/
public static final String replaceWithCallback(
String str, String regexp, StringsReplaceCallback cb)
{
Pattern pat = Pattern.compile(regexp);
return replaceWithCallback(str, pat, cb);
}
/**
* Substitute for PHP's preg_replace_callback().
*/
public static final String replaceWithCallback(
String str, Pattern pat, StringsReplaceCallback cb
){
Matcher mat = pat.matcher(str);
StringBuilder sb = new StringBuilder(str.length() * 11 / 10);
int prevStart = 0;
int prevEnd = 0;
int offset = 0;
while( mat.find() ){
// Create the groups array.
String[] groups = new String[mat.groupCount()+1];
for (int i = 0; i < groups.length; i++) {
groups[i] = mat.group(i);
}
// Append string before match.
sb.append( str.substring(prevEnd+offset, mat.start()+offset) );
// Call the callback and append what it returns.
String newStr = cb.replace( groups );
sb.append( newStr );
// Set the offset according to the lengths difference.
//offset -= mat.group().length();
prevStart = mat.start() + offset;
prevEnd = mat.end() + offset;
}
sb.append( str.substring(prevEnd) );
return sb.toString();
}