A fast, offline regular-expression workbench. Type a pattern, paste the text you are matching against, and see every match, capture group and problem as you type — without sending anything anywhere.
It tells you when your pattern lies to you
A pattern copied out of a Python answer, a Java codebase or a grep command can be perfectly valid here and quietly mean something else — and you find out in production.
• \A \z \Z are string anchors in Python, Ruby, Java and .NET. Here they are not escapes at all, so \Ahttps? matches the literal letter A followed by http.
• [[:alpha:]] is a POSIX class almost everywhere else. Here it is an ordinary set of the letters inside it followed by a literal bracket — it matches two characters, so it matches "a]" and not "alpha".
• \p{L} without the Unicode flag is not a property escape. It matches the four-character text p{L}.
• \Q…\E, [a&&b], (?i), (?>…), a++, (?P<name>…) and more, each explained.
Every one was checked by running it, not by copying a reference table.
It never hangs
Some patterns take exponential time. (a+)+ against forty characters that do not match runs for hours — not a bug, just how backtracking works, and a pattern you can type by accident. Here the match runs somewhere it can be stopped, so you get an explanation and a retry button instead of a frozen app.
It explains the pattern, not just the result
A plain-English breakdown, indented the way the pattern is nested, each line showing the characters it came from. Tap a line to select them. Quantifiers read as part of what they repeat — "a digit, 0 to 9 — one or more times".
Everything you would expect, done carefully
• Matches with their offsets, and adjacent matches in alternating colours so three matches never look like one
• Capture groups by number and by name, showing when a group did not take part at all — which is different from matching nothing
• Zero-length matches marked rather than silently invisible
• Replace with $1, $&, $<name>, $$, $` and $' — JavaScript's syntax — previewed live
• Split, showing the pieces between the matches
• Flags with a sentence each on what they change
• A one-tap toolbar for the syntax that is slow to type on a phone
Take the pattern to your code
Generates a ready-to-paste snippet for Dart, JavaScript, TypeScript, Python, Java, Kotlin, Swift, C#, Go, PHP, Ruby, Rust and grep — with the right string quoting for each, which is not the same in any two of them. It also tells you what will not survive the move: Go and Rust have no backreferences or lookaround at all, so a pattern using them does not run slower there, it fails to compile. Named groups are translated to Python's spelling for you.
29 patterns that are actually tested
Email, URL, IPv4, UUID, JWT, semver, hex colour, ISO dates and timestamps, log levels, key=value pairs, camelCase, snake_case, TODO and block comments, repeated words, trailing whitespace, quoted strings with escapes, and more. Each is shown matching its own example — you cannot judge a pattern on a phone by reading it — and each is checked by the test suite against that example and against cases it must reject.
Also
• A syntax reference, with a section for what is not in this flavour
• Save patterns with a name, a note and the text you tested against
• Recent patterns kept automatically
• Share text in from any other app to test against it
• Light and dark, following your system, and adjustable code text size
Privacy
Every pattern is compiled and run on your device. No account, no sync, no server, and nothing you type is uploaded. The app shows ads and uses Google Analytics for Firebase and Crashlytics; what those report never contains your pattern or your test text — only shapes, such as how long a pattern was and how many matches it found. In the EEA and the UK you are asked about ad personalisation first.
Build, test and explain regular expressions offline, with the traps flagged.