docs: public static String replaceAll(CharSequence str, Pattern pattern, Func1<Matcher, String> replaceFun){
  		if (StrUtil.isEmpty(str)) {
  			return StrUtil.str(str);
  		}
  
  		final Matcher matcher = pattern.matcher(str);
  		final StringBuffer buffer = new StringBuffer();
  		while (matcher.find()) {
  			try {
  				matcher.appendReplacement(buffer, replaceFun.call(matcher));
  			} catch (Exception e) {
  				throw new UtilException(e);
  			}
  		}
  		matcher.appendTail(buffer);
  		return buffer.toString();
  	}