NAME
rgx — regex101 for the terminal — real-time matching, 3 engines, capture groups, replace mode, syntax highlighting,…
SYNOPSIS
brew install brevity1swos/tap/rgxINFO
DESCRIPTION
regex101 for the terminal — real-time matching, 3 engines, capture groups, replace mode, syntax highlighting, plain-English explanations, undo/redo, mouse support. Written in Rust.
README
rgx
A terminal regex tester with real-time matching and multi-engine support
Test and debug regular expressions without leaving your terminal. Written in Rust.

Press F1 in the app for a multi-page cheat sheet with keyboard shortcuts, regex syntax, and engine-specific features.
Who is this for?
rgx is useful if you:
- Work on remote servers where opening a browser isn't practical — SSH sessions, containers, air-gapped environments
- Want to pipe regex results into other commands (
echo "log" | rgx -p '\d+' | sort) — regex101 can't do this - Need to test against specific engine behavior — check if your pattern works in Rust's
regexcrate vs PCRE2 without guessing - Prefer staying in the terminal and find the context switch to a browser tab disruptive
If you write regex a few times a month and regex101.com works fine for you, it probably still will. rgx is strongest for developers who do regex-heavy work in terminal-centric workflows.
Features
- Real-time matching — matches update on every keystroke
- Syntax-highlighted pattern input — AST-based coloring for groups, quantifiers, character classes, anchors, and escapes
- 3 regex engines — Rust
regex(default),fancy-regex(lookaround/backrefs), PCRE2 (full features) - Capture group highlighting — distinct colors per group, nested group support
- Plain-English explanations — walks the regex AST to generate human-readable breakdowns
- Replace/substitution mode — live preview with
$1,${name},$0/$&syntax - Match detail + clipboard — navigate matches/captures with Up/Down, copy with Ctrl+Y
- Pattern history + undo — Ctrl+Z/Ctrl+Shift+Z undo/redo, Alt+Up/Down browse history
- Context-sensitive cheat sheet — F1 multi-page help: shortcuts, regex syntax, engine-specific features
- Whitespace visualization — toggle with Ctrl+W to show spaces as
·, newlines as↵, tabs as→ - Mouse support — click to focus/position cursor, scroll to navigate panels
- Engine selector — switch engines with Ctrl+E, see where behavior differs
- Regex flags — toggle case-insensitive, multiline, dotall, unicode, extended
- Stdin pipe support —
echo "test string" | rgx '\d+' - Non-interactive batch mode —
rgx -p -t "input" 'pattern'prints matches to stdout and exits - Pipeline composability — pipe in, filter, pipe out:
cat log | rgx -p '\d+' | sort -n - Vim mode — optional modal editing (
--vimorvim_mode = true) with Normal/Insert modes, h/j/k/l navigation, w/b/e word motions, dd/cc/x editing, and all global shortcuts preserved - Recipe library — built-in common patterns (email, URL, IP, semver, etc.) — Ctrl+R to browse and load
- Cross-platform — Linux, macOS, Windows
Installation
From crates.io
cargo install rgx-cli
From prebuilt binaries
Download from GitHub Releases.
Shell installer
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/brevity1swos/rgx/releases/latest/download/rgx-installer.sh | sh
Homebrew
brew install brevity1swos/tap/rgx
More installation methods
From source
git clone https://github.com/brevity1swos/rgx.git
cd rgx
cargo install --path .
Without PCRE2 (zero C dependencies)
cargo install rgx-cli --no-default-features
Usage
# Interactive mode rgxVim mode (modal editing)
rgx --vim
Start with a pattern
rgx '\d{3}-\d{3}-\d{4}'
Pipe text from stdin
echo "Call 555-123-4567 or 555-987-6543" | rgx '\d{3}-\d{3}-\d{4}'
Use a specific engine
rgx --engine fancy '\w+(?=@)'
With flags
rgx -i 'hello'
With replacement template
rgx -r '$2/$1' '(\w+)@(\w+)'
Non-interactive batch mode (--print / -p)
rgx -p -t "hello 42 world 99" '\d+' # prints: 42\n99 echo "log line 404" | rgx -p '\d+' # prints: 404
Count matches only (--count / -c)
echo "a1 b2 c3" | rgx -p -c '\d+' # prints: 3
Extract a specific capture group (--group / -g)
echo "user@host" | rgx -p -g 1 '(\w+)@(\w+)' # prints: user
Batch replacement
rgx -p -t "user@host" -r '$2=$1' '(\w+)@(\w+)' # prints: host=user
Pipeline composability
cat server.log | rgx -p 'ERROR: (.*)' | sort | uniq -c
Capture final pattern after interactive editing
PATTERN=$(rgx -P)
Exit codes: 0 = match found, 1 = no match, 2 = error
rgx -p -t "test" '\d+' || echo "no digits found"
Keyboard Shortcuts
| Key | Action |
|---|---|
Tab | Cycle focus: pattern / test / replace / matches / explanation |
Up/Down | Scroll panel / move cursor / select match |
Enter | Insert newline (test string) |
Ctrl+E | Cycle regex engine |
Ctrl+Z | Undo |
Ctrl+Shift+Z | Redo |
Ctrl+Y | Copy selected match to clipboard |
Ctrl+R | Open regex recipe library |
Ctrl+W | Toggle whitespace visualization |
Ctrl+O | Output results to stdout and quit |
Ctrl+S | Save workspace |
Ctrl+Left/Right | Move cursor by word |
Alt+Up/Down | Browse pattern history |
Alt+i/m/s/u/x | Toggle flags (case, multiline, dotall, unicode, extended) |
F1 | Show help (Left/Right to page through) |
Mouse click | Focus panel and position cursor |
Mouse scroll | Scroll panel under cursor |
Esc | Quit (or Normal mode in vim) |
Vim Mode (--vim)
| Key | Mode | Action |
|---|---|---|
i / a / I / A | Normal | Enter Insert mode (at cursor / after / line start / line end) |
o / O | Normal | Open line below / above and enter Insert mode |
Esc | Insert | Return to Normal mode |
h / j / k / l | Normal | Left / down / up / right |
w / b / e | Normal | Word forward / backward / end |
0 / $ / ^ | Normal | Line start / end / first non-blank |
gg / G | Normal | First line / last line |
x | Normal | Delete character under cursor |
dd | Normal | Delete line |
cc | Normal | Clear line and enter Insert mode |
u | Normal | Undo |
p | Normal | Paste from clipboard |
Esc | Normal | Quit |
All global shortcuts (Ctrl+*, Alt+*, F1, Tab) work in both modes.
Engines
| Engine | Features | Dependencies |
|---|---|---|
| Rust regex (default) | Fast, linear time, Unicode | Pure Rust |
| fancy-regex | + lookaround, backreferences | Pure Rust |
| PCRE2 | + possessive quantifiers, recursion, conditionals | Requires libpcre2 |
Comparison
vs. terminal alternatives
| Feature | rgx | regex-tui | rexi |
|---|---|---|---|
| Real-time matching | Yes | Yes | Yes |
| Multiple engines | 3 | 2 | 1 |
| Capture group highlighting | Yes | No | No |
| Plain-English explanations | Yes | No | No |
| Replace/substitution | Yes | No | No |
| Match clipboard copy | Yes | No | No |
| Undo/redo | Yes | No | No |
| Whitespace visualization | Yes | Yes | No |
| Mouse support | Yes | No | No |
| Regex flags toggle | Yes | Yes | No |
| Stdin pipe support | Yes | Yes | Yes |
| Built-in recipe library | Yes | No | No |
| Vim keybindings | Yes | No | No |
| Non-interactive batch mode | Yes | No | No |
vs. regex101.com
regex101.com is the more capable tool overall — it has 8 engines, step-through debugging, code generation, shareable permalinks, and a community pattern library. rgx doesn't try to replace it. Where rgx is useful instead:
- Offline/remote work — no browser or internet needed
- Pipeline integration —
echo data | rgx -p 'pattern' | next-command— non-interactive batch mode with proper exit codes - Engine-specific testing — test against Rust's
regexcrate directly (regex101 doesn't have this engine) - Workspace save/restore — save your session and pick up later
Configuration
rgx looks for a config file at ~/.config/rgx/config.toml:
default_engine = "rust" # "rust", "fancy", or "pcre2"
vim_mode = false # enable vim-style modal editing
Contributing
See CONTRIBUTING.md for details.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
at your option.