Show Menu

Regular Expressions Cheat Sheet by

A quick reference guide for regular expressions (regex), including symbols, ranges, grouping, assertions and some sample patterns to get you started.
development     regex     regular     expressions     programming


Start of string, or start of line in multi-line pattern
Start of string
End of string, or end of line in multi-line pattern
End of string
Word boundary
Not word boundary
Start of word
End of word

Character Classes

Control character
White space
Not white space
Not digit
Not word
Hexade­cimal digit
Octal digit


Upper case letters
Lower case letters
All letters
Digits and letters
Hexade­cimal digits
Space and tab
Blank characters
Control characters
Printed characters
Printed characters and spaces
Digits, letters and underscore


Lookahead assertion
Negative lookahead
Lookbehind assertion
?!= or ?<!
Negative lookbehind
Once-only Subexp­ression
Condition [if then]
Condition [if then else]


0 or more
Exactly 3
1 or more
3 or more
0 or 1
3, 4 or 5
Add a ? to a quantifier to make it ungreedy.

Escape Sequences

Escape following character
Begin literal sequence
End literal sequence
"­Esc­api­ng" is a way of treating characters which have a special meaning in regular expres­sions literally, rather than as special charac­ters.

Common Metach­ara­cters

The escape character is usually \

Special Characters

New line
Carriage return
Vertical tab
Form feed
Octal character xxx
Hex character hh

Groups and Ranges

Any character except new line (\n)
a or b
Passive (non-c­apt­uring) group
Range (a or b or c)
Not (a or b or c)
Lower case letter from a to q
Upper case letter from A to Q
Digit from 0 to 7
Group/­sub­pattern number "­x"
Ranges are inclusive.

Pattern Modifiers

Global match
i *
m *
Multiple lines
s *
Treat string as single line
x *
Allow comments and whitespace in pattern
e *
Evaluate replac­ement
U *
Ungreedy pattern
* PCRE modifier

String Replac­ement

nth non-pa­ssive group
"­xyz­" in /^(abc­(xy­z))$/
"­xyz­" in /^(?:a­bc)­(xyz)$/
Before matched string
After matched string
Last matched string
Entire matched string
Some regex implem­ent­ations use \ instead of $.

Download the Regular Expressions Cheat Sheet

1 Page

PDF (recommended)

Alternative Downloads

Share This Cheat Sheet!



Doug Doug, 10:02 28 Nov 11

Your regex cheatsheet says ^ is "Start of string" and $ is "End of string"

DaveChild DaveChild, 10:02 28 Nov 11

Hi Doug. I've clarified that section. Thanks for the heads up :)

, 10:02 28 Nov 11

It looks unchanged to me. ^ still says it's "start of string" and $ still says "end of string". They should be reversed, right?

, 10:02 28 Nov 11

Actually, I'm sorry, you're right! I was pretty confused there, sorry if I've confused anyone else.

DaveChild DaveChild, 10:02 28 Nov 11

No worries Keith - easy mistake to make!

Tom Hunter Tom Hunter, 10:02 28 Nov 11

Can you tag this as 'regex'? Searching for regex on cheatography yields two other results, but not this one.

Doug Doug, 22:52 12 Apr 12

Would you add \Q... \E to the cheatsheet?

Jorge Jorge, 12:16 4 May 12

It would be nice to see the list of white space characters

Jeff Jeff, 15:44 9 May 12

Great resource! Thanks for putting this together and sharing.

david david, 08:58 20 May 12

What language/flavor is this? Or I should also ask, if non is specified, what tends to be the default? I'm specifically looking for php or javascript, and I know they're all mostly the same, but not 100%.


Chris Chris, 09:19 7 Jun 12

David, Regex is programming language neutral, as in, it doesn't matter if you are programming regex expressions in javascript, c#, c++, PHP, or even command line *nix, makes no difference. Only thing you have to watch out for is some programming languages may require different various regex characters to be escaped differently (so the programming language doesn't try to interpret it). Usually a backslash. For instance \\ means ONE backslash in many languages.

BillSmith BillSmith, 20:27 30 Jan 18

Chris, I am a bit confused.

At the following URL (, I just read this:

"The book covers the regular expression flavors .NET, Java, JavaScript, XRegExp, Perl, PCRE, Python, and Ruby, and the programming languages C#, Java, JavaScript, Perl, PHP, Python, Ruby, and VB.NET. After a quick introduction, the book starts with a detailed regular expressions tutorial which equally covers all 8 regex flavors."

I am having trouble squaring the quoted statement with what you wrote above.


Andy Grosland Andy Grosland, 09:45 28 Jun 12

Very handy, thank you!

Don't forget Perl ;-)

littleguy littleguy, 15:23 6 Aug 12

Great and useful stuff!

Chilean Chilean, 14:03 23 Aug 12

Hi, I'm trying to learn REGEX, and I need to find this: "Page 1 Of 60", ..... "Page 50 of 60", But I can't find it using reg. expressions! :(. How would you do that? Thank you!

kris w kris w, 08:50 13 Sep 12

Is there a cheat sheet to the cheat sheet? Is this in plain english anywhere?..."negative lookahead"..huh?

Travis Travis, 13:07 4 Oct 12

@david, this cheat sheet is pretty neutral. The most common flavor is Perl Compatible Regular Expressions (PCRE). Javascript's engine is close to that and PHP also has Perl Compatible functions for Regex; they use the PREG prefix. Most everything on this sheet should be supported by PHP's engine (I think POSIX character classes are not). Javascript's engine isn't as featureful. Some advanced features aren't supported, but all the basics are there. If you need a multiline match and you can't use the flag, you can use an inverted class range such as [\s\S] in place of the . (dot) to match anything including newlines.

@Chilean+kris w, You need to find a resource for learning Regular Expressions. This cheat sheet is for reference, not learning. Check out

fsnow55 fsnow55, 16:17 22 Oct 12

I was confused by the first comment (which was wrong, but you compounded the error with an acknowlegement). ^ is the start of string or line. Period.

Also, your cheat sheet is better organized than the more comprehensive
since its more succinct. The latter has a 1-page summary but its too verbose.

ty ty, 12:50 22 Nov 12

Nice sheet.

Rob Rob, 11:47 24 Jan 13

Is there a reason why the ']' character is not listed under metacharacters? Doesn't that character require to be escaped if searched for?

Bill Bill, 11:48 24 Jan 13

Hey Dave. Thanks for the cheat sheet. You may want to change "Not a or b or c" when you describe the [^abc} negated character class, because in English, the negation is ambiguous. It could mean "neither a nor be nor c." Or the "a" could be the only negated disjunct. You could mean (~a v (b v c)).

Edir Edir, 09:17 15 Feb 13

Could be added to the list.

Case Conversion
\l Make next character lowercase
\u Make next character uppercase
\L Make entire string (up to \E) lowercase
\U Make entire string (up to \E) uppercase
\u\L Capitalize first char, lowercase rest (sentence)

Gabe Gabe, 17:16 26 Mar 13

I have a database using regex. I am trying to use ^file to get all files with name file_,file ,file_name_date. but it is not working any help

david.baird david.baird, 18:59 15 Jul 13

Is \x supported anywhere? I can't find examples of it in use searching the web. It also does not work in a script on my Macintosh, OSX 10.7.5 using the OS's perl installation.

Drew White Drew White, 15:10 13 Feb 14

I'm trying to come up with a regex string to filter results to a directory that includes a-zA-Z but that also includes an underscore ('_'). Do you know of a way to do this?

David David, 15:14 13 Feb 14

Is \x supported anywhere? I can't seem to find where it is supported. E.g., perl on MacOS 10.7.5. Searching for on-line examples or help also fails, in that no one knows about it.

David David, 15:14 13 Feb 14

Is \x (Regular Expressions Character Classes) supported anywhere? Is this a new class that has just been added, because I am unable to use it in working with IPV6 addresses. Searching for a string containing something like 2001::1a79 with a RegEx 2001::\x{1,4} will fail, but if I use 2001::[a-fA-F0-9]{1,4} will work.

David David, 15:14 13 Feb 14

\x is a term in "Regular Expressions Character Classes" for an hexadecimal digit. How does this compare to the \xhh "Special Characters"? Is it supported today?

Benoit Benoit, 08:54 14 Feb 14

It would be great to increase in some ways the --> : <---- in the
"(?:...) Passive (non-c­apt­uring) group" description. Just after the "?", it is praticaly not visible. Thanks!

Simon Simon, 17:33 17 Feb 14

This is a great cheat-sheet. Two minor niggles:
* Would be great to hint on the characters hidden in the character classes (\s = [ \t\n\r\f], \d = [0-9], \w = [a-zA-Z_0-9])
* I think possibly there's a mistake in the section "Special Characters" - \xxx is probably not the octal character xxx. See "Character Classes": it should be \Oxxx (and by the way: why are \O and \x duplicated in "Special Characters" and "Character Classes"...)
And I support Edir's request for a section "Case Conversion".
But again: great sheet, thanks!

Sahana A V Sahana A V, 17:48 17 Feb 14

Thank you for the Regex cheat sheet :-)

Mervin Mervin, 13:37 19 Apr 14

Thank you. It would have been better if you would have included test, match, etc.

Bhaggs Bhaggs, 11:33 21 Apr 14

Does these support ereg too?

yashawanth yashawanth, 10:24 17 May 14

what is mean by (.*?) please let me know as soon as possible ??

Roedy Green Roedy Green, 20:57 26 May 14

There are so many dialects of regex. The most important fact should be right up top, which dialects do you cover?

Ted Ted, 16:34 13 Jun 14

Can you please fix the pdf so it is able to download? Right now my browser (Google Chrome) only show a raw pdf instead of downloading it. Thank you very much :)

William William, 09:21 10 Jul 14

I agree with Roedy Green. I came here looking for specific a version of regex. This is still so helpful.

Aaron Aaron, 11:13 8 Sep 14

Ted, when the PDF displays in Chrome, right-click in the page and select Save As.

jaya prakash jaya prakash, 09:35 31 Oct 14

Hi ,
Can u help me to find regular expression --

SELECT distinct col_1 FROM tablename
WHERE (SUBSTR(col_1,-1,1)) = '5'

need resuslt as abc-cxy-5

not as abc-cxy-65
not as abc-cxy-555
not as abc-cxy-05545

Ken Sanders Ken Sanders, 09:12 5 Nov 14

Hello Jaya,
MySQL supports regular expressions:
select distinct col_1
from tablename
where col_1
REGEXP '[a-z]{3}-[a-z]{3}-5'

Jeff Jeff, 08:50 11 Mar 15

Great Cheatsheet. Maybe you could add the toggles like (?i...), (?-i...), (?i: ...), (?-i: ...) and their cousins with "m" and "x".

THanks for the great work

Hemant Bellani Hemant Bellani, 12:26 29 Mar 15

Thank you for this !!

TME520 TME520, 03:31 23 Apr 15

Nice cheat sheet, great job !

Sudhakar Sudhakar, 18:36 25 May 15

Hi Team,

How to write a regular expression for this kind of below line present in document .

Ref: 000/SP/00-000

I need to set Target data formats and Keywords for this field.

Thanks in advance.

ms_jo553698 ms_jo553698, 17:25 20 Jun 15

I have been searching for programs that others might be using to roll dice in Pachisi on the internet. I know nothing about programming and don't know how to word the question. Are there cheat sheets out there for something like this?

matu matu, 17:45 29 Jun 15

If you like this you may want to check out my tutorial on how to use regular expressions in Ruby :)

Shamim Shamim, 09:11 14 Sep 15

Thanks for the great job!

Prabhakaran Govindaraj Prabhakaran Govindaraj, 10:59 7 Oct 15

Thanks for the nice and comprehensive resource.

Philbo Baggins Philbo Baggins, 14:45 7 Nov 15

Hi I am a techno retard I gather Regex is coding flavour. However I have no idea what you write is there sny resources.

Sorry for stupidity.


DZanke DZanke, 14:16 28 Nov 15

Great list! I'm new to Teradata Regular Expressions and couldn't find them anywhere.

Ish Ish, 21:27 26 Jan 16

Very helpful. Thanks.

Shrirang Garge Shrirang Garge, 13:29 24 Feb 16

I am finding it difficult to write a regex for the date looks like this...[31-Mar-2015:06:22:48 -600]. I am trying with [0-9a-zA-Z) but giving me null values. Please help.

pradeep pradeep, 13:29 24 Feb 16

I need to split a group of elment baased on "," delimiter this is the example
input :"(10,{10,9,8,7,6,5,4,3,2,1}),(8,{8,7,6,5,4,3,2,1}),(8,{8,7,6,5,4,3,2,1})
output: (10,{10,9,8,7,6,5,4,3,2,1})
(8,{8,7,6,5,4,3,2,1}) regex: [()], which is not getting me in the way i want.

brent brent, 15:28 5 Mar 16

Do you have any issue with us distributing the PDF regex cheat sheet as is with no changes to others. Before I put it on our internal collaboration tool I need to make sure there are no issues from you in doing so. I will not be modifying the PDF or removing your details from the sheet, it will be just as it is but shareable from within our company's portal.

DaveChild DaveChild, 15:31 5 Mar 16

It's released (as all cheat sheets here are) under a CC license, so you can redistribute it according to the terms here:

So, go for it :)

Bartleby Bartleby, 15:29 5 Mar 16

Shrirang: What're you trying to do with the date? Just capture it?

I don't know how detailed you want to be, but this'll capture everything in what you posted. For experienced people it's probably really inelegant, but it's functional, anyway:


Bartleby Bartleby, 15:29 5 Mar 16

Pradeep: I was able to accomplish what you're looking for with the following text (I'm using Notepad++):

Search: (\))(,)
Replace: \1\r\n\2

tasjaevan tasjaevan, 08:24 26 Mar 16

Hi Dave - could you an entry for free whitespace regexes using the ?x syntax?

Abdel Maghraby Abdel Maghraby, 17:19 28 Mar 16

Hello Guys,

I am trying to create a code to prevent white spaces before or after a string.

[ name ]
[ name]
[name ]

Ideally I want this to be strictly


How can i achieve that?

Culbin Culbin, 17:00 12 Jul 16

Hi Folks! I use regexp syntax to schedule TV recordings via TVHeadend which is case-insensitive by default.
Here's an extreme example which highlights the problem.

Simply using 'big brother' produces many different program name matches like:
Big Brother
Big Brother's Bit On The Side
Big Brother: Annihilation
Big Brother: Eviction Massacre
New: Big Brother
New: Big Brother's Bit On The Side
New: Big Brother: Live...

I'd like to tell it to ignore the Bit On The Side programs but match the rest. I've researched till I'm blue in the face with no luck.

My tiny brain tells me that in regular English it would read like this:
match 'big brother' but not if contains 'bit on the side'
but I'm lost when it comes to translating this to regexp syntax.
I honestly don't know if it accepts Lookahead or Lookbehind which I see is mentioned a lot, sorry.

Any geniuses out there got any ideas? Much appreciated.

[deleted] [deleted], 15:12 27 Oct 16

Cảm ơn | Thanks!

hatelove hatelove, 02:02 6 Jan 17

better clarify which syntax flavor this cheatsheet is about, is it BRE? ERE or PCRE?

sainojin sainojin, 07:15 27 Nov 17

Can you talk about flag in Regex, sir?
Specially, it is flag Y. And it will be great if there is examples.
Anyway, thank you so much.

BillSmith BillSmith, 20:14 30 Jan 18

Greetings, and thanks for providing this.

Where can I find a comprehensive, accessible textual reference on this topic that includes numerous examples? Instead of pursuing blind trial and error, I would like to understand thoroughly what I am doing, and why.


fipnova51 fipnova51, 07:23 19 Mar 18

Thanks for this valuable document

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

          Google Analytics Regular Expressions Cheat Sheet
            .NET Regular Expressions Cheat Sheet by

          More Cheat Sheets by DaveChild

          Linux Command Line Cheat Sheet
          CSS2 Cheat Sheet
          mod_rewrite Cheat Sheet