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$.