Skip to content

Commit 934b7a3

Browse files
committed
fix regex error messages WIP
1 parent 836d6fa commit 934b7a3

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/main/java/org/perlonjava/regex/RegexPreprocessorHelper.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -233,19 +233,25 @@ static int handleEscapeSequences(String s, StringBuilder sb, int c, int offset)
233233
sb.append("[^\\n]");
234234
return offset;
235235
}
236-
} else if ((nextChar == 'p' || nextChar == 'P') && offset + 1 < length && s.charAt(offset + 1) == '{') {
237-
// Handle \p{...} and \P{...} constructs
238-
boolean negated = (nextChar == 'P');
239-
offset += 2; // Skip past \p or \P
240-
int endBrace = s.indexOf('}', offset);
241-
if (endBrace != -1) {
242-
String property = s.substring(offset, endBrace).trim();
243-
String translatedProperty = translateUnicodeProperty(property, negated);
244-
sb.setLength(sb.length() - 1); // Remove the backslash
245-
sb.append(translatedProperty);
246-
offset = endBrace;
236+
} else if ((nextChar == 'p' || nextChar == 'P')) {
237+
if (offset + 1 < length && s.charAt(offset + 1) == '{') {
238+
// Existing code for \p{...} and \P{...}
239+
boolean negated = (nextChar == 'P');
240+
offset += 2; // Skip past \p{ or \P{
241+
int endBrace = s.indexOf('}', offset);
242+
if (endBrace != -1) {
243+
String property = s.substring(offset, endBrace).trim();
244+
String translatedProperty = translateUnicodeProperty(property, negated);
245+
sb.setLength(sb.length() - 1); // Remove the backslash
246+
sb.append(translatedProperty);
247+
offset = endBrace;
248+
} else {
249+
RegexPreprocessor.regexError(s, offset, "Missing right brace on \\\\p{}");
250+
}
247251
} else {
248-
RegexPreprocessor.regexError(s, offset, "Missing right brace on \\\\p{}");
252+
// \p or \P without brace
253+
RegexPreprocessor.regexError(s, offset + 1,
254+
"Character following \\" + nextChar + " must be '{' or a single-character Unicode property name");
249255
}
250256
} else {
251257
int c2 = s.codePointAt(offset);

0 commit comments

Comments
 (0)