{"record":{"id":"7e2d177ce9851202","repo":"junit-team/junit5","slug":"pattern-compilation-failed-for-a-regular-expressio","errorCode":null,"errorMessage":"Pattern compilation failed for a regular expression supplied in %s","messagePattern":"Pattern compilation failed for a regular expression supplied in (.+?)","errorType":"exception","errorClass":"PreconditionViolationException","httpStatus":null,"severity":"error","filePath":"junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/EnumSource.java","lineNumber":228,"sourceCode":"\t\t\tPreconditions.notNull(constant, \"Enum constant must not be null\");\n\t\t\tPreconditions.notNull(names, \"names must not be null\");\n\n\t\t\treturn selector.test(constant.name(), names);\n\t\t}\n\n\t\tprivate static void validateNames(EnumSource enumSource, Set<? extends Enum<?>> constants, Set<String> names) {\n\t\t\tSet<String> allNames = constants.stream().map(Enum::name).collect(toSet());\n\t\t\tPreconditions.condition(allNames.containsAll(names),\n\t\t\t\t() -> \"Invalid enum constant name(s) in \" + enumSource + \". Valid names include: \" + allNames);\n\t\t}\n\n\t\tprivate static void validatePatterns(EnumSource enumSource, Set<? extends Enum<?>> constants,\n\t\t\t\tSet<String> names) {\n\t\t\ttry {\n\t\t\t\tnames.forEach(Pattern::compile);\n\t\t\t}\n\t\t\tcatch (PatternSyntaxException e) {\n\t\t\t\tthrow new PreconditionViolationException(\n\t\t\t\t\t\"Pattern compilation failed for a regular expression supplied in \" + enumSource, e);\n\t\t\t}\n\t\t}\n\n\t\tprivate interface Validator {\n\t\t\tvoid validate(EnumSource enumSource, Set<? extends Enum<?>> constants, Set<String> names);\n\t\t}\n\n\t}\n\n}\n","sourceCodeStart":210,"sourceCodeEnd":240,"githubUrl":"https://github.com/junit-team/junit5/blob/f070c699a08b5d8393df9afd147af5c5e90bb21b/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/EnumSource.java#L210-L240","documentation":"Thrown by EnumSource validator validatePatterns when one of the regular expressions supplied via @CsvSource(names = ...) or @EnumSource(names = ..., mode = MATCH_ANY/MATCH_ALL) cannot be compiled by Pattern.compile. The cause is the PatternSyntaxException describing the malformed regex; the message names the @EnumSource annotation.","triggerScenarios":"Supplying an invalid regular expression in @EnumSource(names = ...) with a matching mode. names.forEach(Pattern::compile) throws PatternSyntaxException for a syntactically invalid pattern.","commonSituations":"Unclosed character class, unbalanced parentheses, invalid quantifier, or stray regex metacharacters in the names pattern. Forgetting that names are interpreted as regexes when a MATCH mode is used.","solutions":["Fix the regex syntax in @EnumSource(names = ...).","If you meant literal names, use the default mode (no MATCH_ANY/MATCH_ALL) so names are matched literally, or escape regex metacharacters.","Test the pattern in isolation with Pattern.compile before applying it."],"exampleFix":"// before\n@EnumSource(value = TimeUnit.class, names = \"[SECONDS\", mode = Mode.MATCH_ANY)\n\n// after\n@EnumSource(value = TimeUnit.class, names = \".*SECOND.*\", mode = Mode.MATCH_ANY)","handlingStrategy":"validation","validationCode":"// Compile each name pattern before running the parameterized test\nfor (String name : names) {\n    try { Pattern.compile(name); }\n    catch (PatternSyntaxException e) { throw new IllegalArgumentException(\"Bad regex in @EnumSource names: \" + name, e); }\n}","typeGuard":"static boolean isValidRegex(String pattern) {\n    try { Pattern.compile(pattern); return true; } catch (PatternSyntaxException e) { return false; }\n}","tryCatchPattern":null,"preventionTips":["When using MATCH_ANY/MATCH_ALL, remember @EnumSource names are regexes.","Test regex patterns in isolation first.","For literal names, omit the matching mode so names are matched exactly."],"tags":["junit-jupiter","enum-source","regex","validation"],"backgroundTag":null,"analyzedSha":"f070c699a08b5d8393df9afd147af5c5e90bb21b","analyzedAt":"2026-08-11T20:31:00.530Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}