MarginaliaSearch/code/libraries/guarded-regex
Viktor Lofgren fe8d583fdd (sys) Upgrade to JDK22
This also entails upgrading JIB to 3.4.1 and Lombok to 1.18.32.
2024-03-21 14:27:13 +01:00
..
java/nu/marginalia/gregex (refac) Remove src/main from all source code paths. 2024-02-23 16:13:40 +01:00
build.gradle (sys) Upgrade to JDK22 2024-03-21 14:27:13 +01:00
readme.md (docs) Begin un-fucking the docs after refactoring 2024-02-27 21:22:21 +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