{"record":{"id":"00f0f31df44a3882","repo":"apple/pkl","slug":"invalidregexsyntax","errorCode":"invalidRegexSyntax","errorMessage":"invalidRegexSyntax","messagePattern":"invalidRegexSyntax","errorType":"error_code","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/runtime/VmUtils.java","lineNumber":915,"sourceCode":"      throw new VmExceptionBuilder()\n          .evalError(\"cannotInstantiateAbstractClass\", parentClass)\n          .withOptionalLocation(parentNode)\n          .build();\n    }\n\n    assert parentClass.isExternal();\n    throw new VmExceptionBuilder()\n        .evalError(\"cannotInstantiateExternalClass\", parentClass)\n        .withOptionalLocation(parentNode)\n        .build();\n  }\n\n  @TruffleBoundary\n  public static Pattern compilePattern(String pattern, Node location) {\n    try {\n      return Pattern.compile(pattern, Pattern.UNICODE_CHARACTER_CLASS | Pattern.UNICODE_CASE);\n    } catch (PatternSyntaxException e) {\n      throw new VmExceptionBuilder()\n          .withLocation(location)\n          .evalError(\"invalidRegexSyntax\", pattern, e.getMessage())\n          .build();\n    }\n  }\n\n  @TruffleBoundary\n  public static <K, V> K getKey(Map.Entry<K, V> entry) {\n    return entry.getKey();\n  }\n\n  @TruffleBoundary\n  public static <K, V> V getValue(Map.Entry<K, V> entry) {\n    return entry.getValue();\n  }\n\n  public static String getDisplayUri(SourceSection section, StackFrameTransformer transformer) {\n    var sourceUri = section.getSource().getURI();","sourceCodeStart":897,"sourceCodeEnd":933,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/runtime/VmUtils.java#L897-L933","documentation":"`VmUtils.compilePattern` compiles regexes with UNICODE_CHARACTER_CLASS | UNICODE_CASE via java.util.regex.Pattern; a syntactically invalid pattern throws PatternSyntaxException, which is translated into invalidRegexSyntax with the pattern and the underlying regex-engine message.","triggerScenarios":"Calling regex-using APIs (`RegExp(...)`, `find`, `replaceAll`, matchers in `is` type tests) with a pattern that has unbalanced parentheses/brackets, bad quantifiers, dangling escapes, or unsupported constructs.","commonSituations":"Hand-written regexes with escaping mistakes (Windows paths, dots, slashes), patterns built by string interpolation that break syntax, porting regexes from other flavors (PCRE/JS lookbehinds, named groups) into Java regex.","solutions":["Read the included regex-engine message — it names the exact syntax error and index.","Fix escaping: double-escape in string literals (`\\\\.`) and escape metacharacters like `(`, `[`, `+`, `*`.","Validate the pattern against Java (not PCRE/JS) syntax; remove unsupported constructs.","Test the pattern in a Java-regex-compatible tool before embedding it, and prefer raw literal concatenation over fragile interpolation."],"exampleFix":"// before\nval re = RegExp(\"data/(\\\\d+\")\n// after\nval re = RegExp(\"data/(\\\\d+)\")","handlingStrategy":"validation","validationCode":"function isValidRegex(p) { try { new RegExp(p); return true; } catch { return false; } }","typeGuard":"function safeRegExp(p) { try { return new RegExp(p); } catch { return null; } }","tryCatchPattern":"try { Pattern.compile(pattern) } catch (e) { /* invalidRegexSyntax: inspect e message for position */ }","preventionTips":["Test regexes in a Java-flavor regex tool before embedding","Double-escape metacharacters inside string literals","Avoid interpolating untrusted fragments into patterns"],"tags":["pkl","regex","pattern-syntax","validation"],"backgroundTag":"invalid-regex-pattern","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}