Regex Cheat Sheet - PCRE
A comprehensive guide to regular expressions with patterns, examples, and explanations
Basic Metacharacters
.
Any character except newline\
Escape character|
Alternation (OR)^
Start of string/line$
End of string/lineCharacter Classes
[abc]
Any of a, b, or c[^abc]
Not a, b, or c[a-z]
Range from a to z\d
Digit [0-9]\D
Non-digit [^0-9]\w
Word character [a-zA-Z0-9_]\W
Non-word character\s
Whitespace\S
Non-whitespace\h
Horizontal whitespace\H
Non-horizontal whitespace\v
Vertical whitespace\V
Non-vertical whitespaceQuantifiers
*
0 or more (greedy)+
1 or more (greedy)?
0 or 1 (greedy){n}
Exactly n times{n,}
n or more times{n,m}
Between n and m times*?
0 or more (lazy)+?
1 or more (lazy)??
0 or 1 (lazy)*+
0 or more (possessive)++
1 or more (possessive)?+
0 or 1 (possessive)Groups and Capturing
(pattern)
Capturing group(?:pattern)
Non-capturing group(?<name>pattern)
Named capturing group(?'name'pattern)
Named capturing group (alternative)(?P<name>pattern)
Python-style named group\1
Backreference to group 1\g{1}
Backreference to group 1 (alternative)\k<name>
Named backreference\k'name'
Named backreference (alternative)\g{name}
Named backreference (alternative)(?>pattern)
Atomic groupLookarounds
(?=pattern)
Positive lookahead(?!pattern)
Negative lookahead(?<=pattern)
Positive lookbehind(?<!pattern)
Negative lookbehind(*positive_lookahead:pattern)
Alternative positive lookahead syntax(*negative_lookahead:pattern)
Alternative negative lookahead syntaxModifiers
(?i)
Case insensitive(?m)
Multiline mode(?s)
Dot matches newline(?x)
Extended syntax (ignore whitespace)(?A)
ASCII-only matching(?J)
Allow duplicate names(?U)
Ungreedy (swap meaning of quantifiers)(?-i)
Turn off case insensitive(?i:pattern)
Local case insensitiveRecursion and Subroutines
(?R)
Recurse entire pattern(?0)
Recurse entire pattern (alternative)(?1)
Recurse group 1(?&name)
Call named subroutine(?P>name)
Call named subroutine (Python style)(?(DEFINE)(?<name>pattern))
Define subroutineConditional Patterns
(?(condition)yes|no)
Conditional pattern(?(1)yes|no)
If group 1 matched(?(<name>)yes|no)
If named group matched(?(R)yes|no)
If in recursion(?(R1)yes|no)
If in recursion of group 1(?(DEFINE)pattern)
Define pattern without matchingBacktracking Control
(*PRUNE)
Prune backtracking(*SKIP)
Skip to next starting position(*THEN)
Force failure of enclosing group(*COMMIT)
Commit to current match(*FAIL)
Force failure(*F)
Force failure (short form)(*ACCEPT)
Force successful matchUnicode Properties
\p{L}
Any letter\p{N}
Any number\p{P}
Any punctuation\p{S}
Any symbol\p{Ll}
Lowercase letter\p{Lu}
Uppercase letter\p{Script=Latin}
Latin script characters\p{Block=BasicLatin}
Basic Latin Unicode block\P{L}
Not a letter