sb.append(',');
}
if (this.ranges[i] == this.ranges[i+1]) {
- sb.append(escapeCharInCharClass(this.ranges[i]));
+ sb.append(escapeCharInCharClass(this.ranges[i], options));
} else {
- sb.append(escapeCharInCharClass(this.ranges[i]));
+ sb.append(escapeCharInCharClass(this.ranges[i], options));
sb.append('-');
- sb.append(escapeCharInCharClass(this.ranges[i+1]));
+ sb.append(escapeCharInCharClass(this.ranges[i+1], options));
}
}
sb.append(']');
sb.append(',');
}
if (this.ranges[i] == this.ranges[i+1]) {
- sb.append(escapeCharInCharClass(this.ranges[i]));
+ sb.append(escapeCharInCharClass(this.ranges[i], options));
} else {
- sb.append(escapeCharInCharClass(this.ranges[i]));
+ sb.append(escapeCharInCharClass(this.ranges[i], options));
sb.append('-');
- sb.append(escapeCharInCharClass(this.ranges[i+1]));
+ sb.append(escapeCharInCharClass(this.ranges[i+1], options));
}
}
sb.append(']');
return ret;
}
- private static String escapeCharInCharClass(int ch) {
+ private static String escapeCharInCharClass(int ch, int options) {
String ret;
switch (ch) {
case '[': case ']': case '-': case '^':
case '\r': ret = "\\r"; break;
case '\t': ret = "\\t"; break;
case 0x1b: ret = "\\e"; break;
+ case '$':
+ if (isSet(options, RegularExpression.XMLSCHEMA_MODE)) {
+ ret = "\\$";
+ break;
+ }
//case 0x0b: ret = "\\v"; break;
default:
if (ch < 0x20) {
ret = "\\x"+pre.substring(pre.length()-2, pre.length());
} else if (ch >= 0x10000) {
String pre = "0"+Integer.toHexString(ch);
- ret = "\\v"+pre.substring(pre.length()-6, pre.length());
+ String sub = pre.substring(pre.length()-6, pre.length());
+ if (isSet(options, RegularExpression.XMLSCHEMA_MODE)) {
+ ret = "\\x{"+sub+"}";
+ } else {
+ ret = "\\v"+sub;
+ }
} else {
ret = ""+(char)ch;
}