CatgirlIntelligenceAgency/code/libraries/guarded-regex
Viktor Lofgren dbe9235f3a (*) Upgrade to JDK21 with preview enabled.
... also move some common configuration into the root build.gradle-file.

Support for JDK21 in lombok is a bit sketchy at the moment, but it seems to work.  This upgrade is kind of important as the new index construction really benefits from Arena based lifecycle control over off-heap memory.
2023-09-24 10:38:59 +02:00
..
src/main/java/nu/marginalia/gregex Move all code to a code directory. 2023-03-07 17:14:32 +01:00
build.gradle (*) Upgrade to JDK21 with preview enabled. 2023-09-24 10:38:59 +02:00
readme.md Move all code to a code directory. 2023-03-07 17:14:32 +01:00

Guarded Regex

This is a simple library for creating guarded regular expressions. Pattern matching in Java is pretty slow even with compiled regular expressions.

Guarding them with a startsWith(), endsWith() or contains() can be an order of magnitude faster, but leads to an unfortunate spreading out of the logic across the pattern and the guard condition.

Guarded regexes aims to fix this. Instead of code like

Pattern pattern = Pattern.compile("[123]?foo(bar|baz){2,5}");

void ifTheThingDoTheThing(String str) {
  if (str.contains("foo") && pattern.matcher(str).matches()) {
    doTheThing();
  }
}

you get the more expressive variant

GuardedRegex thingPredicate = 
    GuardedRegexFactory.contains("foo", "[123]?foo(bar|baz){2,5}");

void ifTheThingDoTheThing(String str) {
    if (thingPredicate.test(str)) {
      doTheThing();
    }
}

Central Classes