Files
nvim/cheatsheets/regex.md
T
2026-06-16 16:26:28 +01:00

15 KiB

Regex Cheat Sheet

Anchors

┌────┬─────────────────────────────────────────────────────────┐ │ ^ │ Start of string, or start of line in multi-line pattern │ ├────┼─────────────────────────────────────────────────────────┤ │ \A │ Start of string │ ├────┼─────────────────────────────────────────────────────────┤ │ $ │ End of string, or end of line in multi-line pattern │ ├────┼─────────────────────────────────────────────────────────┤ │ \Z │ End of string │ ├────┼─────────────────────────────────────────────────────────┤ │ \b │ Word boundary │ ├────┼─────────────────────────────────────────────────────────┤ │ \B │ Not word boundary │ ├────┼─────────────────────────────────────────────────────────┤ │ < │ Start of word │ ├────┼─────────────────────────────────────────────────────────┤ │ > │ End of word │ └────┴─────────────────────────────────────────────────────────┘

Character Classes

┌────┬────────────────────┐ │ \c │ Control character │ ├────┼────────────────────┤ │ \s │ White space │ ├────┼────────────────────┤ │ \S │ Not white space │ ├────┼────────────────────┤ │ \d │ Digit │ ├────┼────────────────────┤ │ \D │ Not digit │ ├────┼────────────────────┤ │ \w │ Word │ ├────┼────────────────────┤ │ \W │ Not word │ ├────┼────────────────────┤ │ \x │ Hexadecimal digit │ ├────┼────────────────────┤ │ \O │ Octal digit │ └────┴────────────────────┘

POSIX

┌───────────┬───────────────────────────────┐ │ [:upper:] │ Upper case letters │ ├───────────┼───────────────────────────────┤ │ [:lower:] │ Lower case letters │ ├───────────┼───────────────────────────────┤ │ [:alpha:] │ All letters │ ├───────────┼───────────────────────────────┤ │ [:alnum:] │ Digits and letters │ ├───────────┼───────────────────────────────┤ │ [:digit:] │ Digits │ ├───────────┼───────────────────────────────┤ │ [:xdigit:]│ Hexadecimal digits │ ├───────────┼───────────────────────────────┤ │ [:punct:] │ Punctuation │ ├───────────┼───────────────────────────────┤ │ [:blank:] │ Space and tab │ ├───────────┼───────────────────────────────┤ │ [:space:] │ Blank characters │ ├───────────┼───────────────────────────────┤ │ [:cntrl:] │ Control characters │ ├───────────┼───────────────────────────────┤ │ [:graph:] │ Printed characters │ ├───────────┼───────────────────────────────┤ │ [:print:] │ Printed characters and spaces │ ├───────────┼───────────────────────────────┤ │ [:word:] │ Digits, letters and underscore│ └───────────┴───────────────────────────────┘

Assertions

┌──────┬──────────────────────────────┐ │ ?= │ Lookahead assertion │ ├──────┼──────────────────────────────┤ │ ?! │ Negative lookahead │ ├──────┼──────────────────────────────┤ │ ?<= │ Lookbehind assertion │ ├──────┼──────────────────────────────┤ │ ?!= │ Negative lookbehind │ │ ?<! │ │ ├──────┼──────────────────────────────┤ │ ?> │ Once-only subexpression │ ├──────┼──────────────────────────────┤ │ ?() │ Condition [if then] │ ├──────┼──────────────────────────────┤ │ ?()| │ Condition [if then else] │ ├──────┼──────────────────────────────┤ │ ?# │ Comment │ └──────┴──────────────────────────────┘

Quantifiers

┌───────┬─────────────┐ │ * │ 0 or more │ ├───────┼─────────────┤ │ + │ 1 or more │ ├───────┼─────────────┤ │ ? │ 0 or 1 │ ├───────┼─────────────┤ │ {3} │ Exactly 3 │ ├───────┼─────────────┤ │ {3,} │ 3 or more │ ├───────┼─────────────┤ │ {3,5} │ 3, 4 or 5 │ └───────┴─────────────┘

Add a ? to a quantifier to make it ungreedy.

Escape Sequences

┌────┬─────────────────────────────┐ │ \ │ Escape following character │ ├────┼─────────────────────────────┤ │ \Q │ Begin literal sequence │ ├────┼─────────────────────────────┤ │ \E │ End literal sequence │ └────┴─────────────────────────────┘

"Escaping" is a way of treating characters which have a special meaning in regular expressions literally, rather than as special characters.

Common Metacharacters

┌───┬───┬───┬───┐ │ ^ │ [ │ . │ $ │ ├───┼───┼───┼───┤ │ { │ * │ ( │ \ │ ├───┼───┼───┼───┤ │ + │ ) │ | │ ? │ ├───┼───┼───┼───┤ │ < │ > │ │ │ └───┴───┴───┴───┘

The escape character is usually \.

Special Characters

┌──────┬────────────────────┐ │ \n │ New line │ ├──────┼────────────────────┤ │ \r │ Carriage return │ ├──────┼────────────────────┤ │ \t │ Tab │ ├──────┼────────────────────┤ │ \v │ Vertical tab │ ├──────┼────────────────────┤ │ \f │ Form feed │ ├──────┼────────────────────┤ │ \xxx │ Octal character xxx│ ├──────┼────────────────────┤ │ \xhh │ Hex character hh │ └──────┴────────────────────┘

Groups and Ranges

┌─────────┬────────────────────────────────────┐ │ . │ Any character except new line (\n) │ ├─────────┼────────────────────────────────────┤ │ (a|b) │ a or b │ ├─────────┼────────────────────────────────────┤ │ (...) │ Group │ ├─────────┼────────────────────────────────────┤ │ (?:...) │ Passive (non-capturing) group │ ├─────────┼────────────────────────────────────┤ │ [abc] │ Range (a or b or c) │ ├─────────┼────────────────────────────────────┤ │ [^abc] │ Not (a or b or c) │ ├─────────┼────────────────────────────────────┤ │ [a-q] │ Lower case letter from a to q │ ├─────────┼────────────────────────────────────┤ │ [A-Q] │ Upper case letter from A to Q │ ├─────────┼────────────────────────────────────┤ │ [0-7] │ Digit from 0 to 7 │ ├─────────┼────────────────────────────────────┤ │ \x │ Group/subpattern number "x" │ └─────────┴────────────────────────────────────┘

Ranges are inclusive.

Pattern Modifiers

┌────┬────────────────────────────────────┐ │ g │ Global match │ ├────┼────────────────────────────────────┤ │ i │ Case-insensitive │ ├────┼────────────────────────────────────┤ │ m │ Multiple lines │ ├────┼────────────────────────────────────┤ │ s │ Treat string as single line │ ├────┼────────────────────────────────────┤ │ x │ Allow comments and whitespace │ ├────┼────────────────────────────────────┤ │ e │ Evaluate replacement │ ├────┼────────────────────────────────────┤ │ U │ Ungreedy pattern │ └────┴────────────────────────────────────┘

  • PCRE modifier

String Replacement

┌────┬──────────────────────────────────┐ │ $n │ nth non-passive group │ ├────┼──────────────────────────────────┤ │ $2 │ "xyz" in /^(abc(xyz))$/ │ ├────┼──────────────────────────────────┤ │ $1 │ "xyz" in /^(?:abc)(xyz)$/ │ ├────┼──────────────────────────────────┤ │ $`` │ Before matched string │ ├────┼──────────────────────────────────┤ │ $'│ After matched string │ ├────┼──────────────────────────────────┤ │$+│ Last matched string │ ├────┼──────────────────────────────────┤ │$&` │ Entire matched string │ └────┴──────────────────────────────────┘

Some regex implementations use \ instead of $.