Files

1.7 KiB

regex

Companion code for the ankurm.com post "Java Regex Tutorial: Pattern, Matcher, Groups, Lookarounds and ReDoS." Module regex in java-core-examples.

All explanation lives in the post; this module holds the runnable evidence and the captured output.

Versions

Component Version
JDK 25.0.4.1+1 (Temurin, LTS)
JUnit Jupiter 5.11.0
Hardware 2 vCPU x86-64 VM (timings are indicative, not a leaderboard)

Quickstart

export JDK25_HOME=/path/to/jdk-25
./scripts/run-all.sh        # rebuilds, runs the tests, regenerates everything in output/

What is in here

File Shows Output
BasicsDemo matches / lookingAt / find, numbered and named groups, results(), flags 01
LookaroundDemo lookahead, lookbehind, password policy, thousands separators, lookbehind limits 02
ReplaceDemo $1 / ${name}, the $ trap, replaceAll(Function), quoteReplacement, appendReplacement 03
BlowupDemo timings at growing input: what the JDK tames, what it does not 04
FixesDemo rewrite, possessive, atomic group; find() is still quadratic 05
LimitsDemo StackOverflowError from (?:a|b)* on long input 06
RegexTimeout, Safe a CharSequence that aborts a match at a deadline; length limit + deadline wrapper used by 04, 05
JDK Pattern.java excerpt the loop-memoisation gate, and the absence of any timeout API 07
RegexClaimsTest 11 assertions behind the claims above 08

Every timing run is capped (2 s in BlowupDemo) by RegexTimeout, so the demos always finish. Timings move by tens of percent between runs; the growth shape and which patterns abort do not.