Pattern boundaryPattern = Pattern.compile("((^|\\p{Punct})\\p{javaLowerCase}+)|(\\p{javaUpperCase}\\p{javaLowerCase}*)");
Matcher matcher = boundaryPattern.matcher(name);
int pos = 0;
StringBuilder builder = new StringBuilder();
while (matcher.find()) {
String prefix = name.substring(pos, matcher.start());
if (prefix.length() > 0) {
builder.append(Pattern.quote(prefix));
}
builder.append(Pattern.quote(matcher.group()));
builder.append("[\\p{javaLowerCase}\\p{Digit}]*");