languagetool-org/languagetool · error · UnsupportedPatternRuleException

Advanced regex like '\p{Punct}' are not supported: + pattern

Error message

Advanced regex like '\p{Punct}' are not supported: + patternToken

What it means

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.

Source

Thrown at languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java:238

  private Term getQueryTerm(String prefix, String str, String suffix) {
    return new Term(searchFieldName, prefix.toLowerCase() + str.toLowerCase() + suffix.toLowerCase());
  }

  private Query getRegexQuery(Term term, String str, PatternToken patternToken) throws UnsupportedPatternRuleException {
    try {
      if (needsSimplification(str)) {
        Term newTerm = new Term(term.field(), simplifyRegex(term.text()));
        return new RegexpQuery(newTerm);
      }
      if (str.contains("?iu") || str.contains("?-i")) {
        // Lucene's RegexpQuery doesn't seem to support this
        throw new UnsupportedPatternRuleException("Regex constructs like '?iu' and '?-i' are not supported: " + patternToken);
      }
      return new RegexpQuery(term);
    } catch (IllegalArgumentException e) {
      // constructs like "\p{Punct}" not supported by Lucene RegExp:
      throw new UnsupportedPatternRuleException("Advanced regex like '\\p{Punct}' are not supported: " + patternToken);
    }
  }

  private void checkUnsupportedElement(PatternToken patternPatternToken)
      throws UnsupportedPatternRuleException {
    if (patternPatternToken.hasOrGroup()) {
      // TODO: this is not enough: the first of the tokens in the <or> group will not get into this branch
      throw new UnsupportedPatternRuleException("<or> not yet supported.");
    }
    if (patternPatternToken.isUnified()) {
      throw new UnsupportedPatternRuleException("Elements with unified tokens are not supported.");
    }
    if (patternPatternToken.getString() != null && patternPatternToken.getString().matches("\\\\\\d+")) { // e.g. "\1"
      throw new UnsupportedPatternRuleException("Elements with only match references (e.g. \\1) are not supported.");
    }
  }

}

View on GitHub (pinned to 2e990059ce)

Solutions

  1. Replace unsupported constructs like \p{Punct} with explicit character classes
  2. Simplify the regex to Lucene's supported syntax
  3. Skip the rule when indexing
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java:238 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of languagetool-org/languagetool@2e990059ce (2026-09-06). Data as JSON: /api/errors/045ade7e894a2d3c. Report an issue: GitHub.