{"record":{"id":"4d1eebb42a6a8a51","repo":"code4craft/webmagic","slug":"regex-must-not-be-empty","errorCode":null,"errorMessage":"regex must not be empty","messagePattern":"regex must not be empty","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexSelector.java","lineNumber":32,"sourceCode":" * @author code4crafter@gmail.com <br>\n * @since 0.1.0\n */\npublic class RegexSelector implements Selector {\n\n    private String regexStr;\n\n    private Pattern regex;\n\n    private int group = 1;\n\n    public RegexSelector(String regexStr, int group) {\n        this.compileRegex(regexStr);\n        this.group = group;\n    }\n\n    private void compileRegex(String regexStr) {\n        if (StringUtils.isBlank(regexStr)) {\n            throw new IllegalArgumentException(\"regex must not be empty\");\n        }\n        try {\n            this.regex = Pattern.compile(regexStr, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);\n            this.regexStr = regexStr;\n        } catch (PatternSyntaxException e) {\n            throw new IllegalArgumentException(\"invalid regex \"+regexStr, e);\n        }\n    }\n\n    /**\n     * Create a RegexSelector. When there is no capture group, the value is set to 0 else set to 1.\n     * @param regexStr the regular expression.\n     */\n    public RegexSelector(String regexStr) {\n        this.compileRegex(regexStr);\n        if (regex.matcher(\"\").groupCount() == 0) {\n            this.group = 0;\n        } else {","sourceCodeStart":14,"sourceCodeEnd":50,"githubUrl":"https://github.com/code4craft/webmagic/blob/67816a19d68a4fec4657bf1336227e046e251df2/webmagic-core/src/main/java/us/codecraft/webmagic/selector/RegexSelector.java#L14-L50","documentation":"RegexSelector validates its pattern in compileRegex and throws IllegalArgumentException when the regex string is null, empty, or blank. A regex selector without a pattern cannot match anything, so construction is refused immediately.","triggerScenarios":"new RegexSelector(\"\") or new RegexSelector(null); passing an empty regexStr read from blank configuration; RegexSelector created with a blank string variable.","commonSituations":"Regex pulled from a properties file or user input that is empty; default config value left unfilled; string concatenation producing an empty pattern.","solutions":["Supply a non-blank regex string to the RegexSelector constructor","Validate the pattern with StringUtils.isNotBlank(regex) before constructing the selector","Fix the config/source that yields the empty value"],"exampleFix":"// before\nSelectable sel = new RegexSelector(\"\");\n// after\nSelectable sel = new RegexSelector(\"<title>(.*?)</title>\");","handlingStrategy":"validation","validationCode":"if (regexStr == null || regexStr.trim().isEmpty()) { throw new IllegalArgumentException(\"regex required\"); }","typeGuard":null,"tryCatchPattern":"try { sel = new RegexSelector(cfgRegex); } catch (IllegalArgumentException e) { log.error(\"blank/invalid regex config\", e); sel = defaultSelector; }","preventionTips":["Validate regex config values at startup with StringUtils.isNotBlank","Fail fast on empty settings files","Provide sane default patterns"],"tags":["webmagic","regex","illegal-argument","validation"],"backgroundTag":"invalid-regex-pattern","analyzedSha":"67816a19d68a4fec4657bf1336227e046e251df2","analyzedAt":"2026-09-08T11:15:28.425Z","contentChangedAt":"2026-09-08T11:15:28.425Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}