{"record":{"id":"045ade7e894a2d3c","repo":"languagetool-org/languagetool","slug":"advanced-regex-like-p-punct-are-not-supported","errorCode":null,"errorMessage":"Advanced regex like '\\p{Punct}' are not supported: + patternToken","messagePattern":"Advanced regex like '\\\\p(.+?)' are not supported: \\+ patternToken","errorType":"exception","errorClass":"UnsupportedPatternRuleException","httpStatus":null,"severity":"error","filePath":"languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java","lineNumber":238,"sourceCode":"\n  private Term getQueryTerm(String prefix, String str, String suffix) {\n    return new Term(searchFieldName, prefix.toLowerCase() + str.toLowerCase() + suffix.toLowerCase());\n  }\n\n  private Query getRegexQuery(Term term, String str, PatternToken patternToken) throws UnsupportedPatternRuleException {\n    try {\n      if (needsSimplification(str)) {\n        Term newTerm = new Term(term.field(), simplifyRegex(term.text()));\n        return new RegexpQuery(newTerm);\n      }\n      if (str.contains(\"?iu\") || str.contains(\"?-i\")) {\n        // Lucene's RegexpQuery doesn't seem to support this\n        throw new UnsupportedPatternRuleException(\"Regex constructs like '?iu' and '?-i' are not supported: \" + patternToken);\n      }\n      return new RegexpQuery(term);\n    } catch (IllegalArgumentException e) {\n      // constructs like \"\\p{Punct}\" not supported by Lucene RegExp:\n      throw new UnsupportedPatternRuleException(\"Advanced regex like '\\\\p{Punct}' are not supported: \" + patternToken);\n    }\n  }\n\n  private void checkUnsupportedElement(PatternToken patternPatternToken)\n      throws UnsupportedPatternRuleException {\n    if (patternPatternToken.hasOrGroup()) {\n      // TODO: this is not enough: the first of the tokens in the <or> group will not get into this branch\n      throw new UnsupportedPatternRuleException(\"<or> not yet supported.\");\n    }\n    if (patternPatternToken.isUnified()) {\n      throw new UnsupportedPatternRuleException(\"Elements with unified tokens are not supported.\");\n    }\n    if (patternPatternToken.getString() != null && patternPatternToken.getString().matches(\"\\\\\\\\\\\\d+\")) { // e.g. \"\\1\"\n      throw new UnsupportedPatternRuleException(\"Elements with only match references (e.g. \\\\1) are not supported.\");\n    }\n  }\n\n}","sourceCodeStart":220,"sourceCodeEnd":256,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java#L220-L256","documentation":"Search-index guard: Lucene's RegexpQuery rejected the token's regex with IllegalArgumentException (e.g. '\\p{Punct}' Unicode class constructs), so it is rethrown as UnsupportedPatternRuleException.","triggerScenarios":"Thrown at languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java:238 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Replace unsupported constructs like \\p{Punct} with explicit character classes","Simplify the regex to Lucene's supported syntax","Skip the rule when indexing"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}