Regular Expressions 101

Save & Share

  • Save Regex
    ctrl+s
  • Update Regex
    ctrl+⇧+s

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8

Function

  • Match
  • Substitution
  • List
  • Unit Tests
/
# Leap Years are any year that can be evenly divided by 4 # (such as 2012, 2016, etc) # except if it can be evenly divided by 100 # then it isn't (such as 2100, 2200, etc) # except if it can be evenly divided by 400, # then it is (such as 2000, 2400) # https://www.mathsisfun.com/leap-years.html # ------------------------------------------------- # verify date dd/mm/yyyy; possible separators: -.,/ # valid year range: 0000-9999 ^ # start anchor # precheck xx-xx-xxxx,... add new separators here (?=\d{2}([-.,\/])\d{2}\1\d{4}$) (?: # day-check: non caturing group # days 01-28 0[1-9]|1\d|[2][0-8]| # february 29d check for leap year: all 4y / 00 years: only each 400 # 0400,0800,1200,1600,2000,... 29 (?!.02. # not if feb: if not ... (?! # 00 years: exclude !0 %400 years (?!(?:[02468][1-35-79]|[13579][0-13-57-9])00) # 00,04,08,12,... \d{2}(?:[02468][048]|[13579][26]) ) )| # d30 negative lookahead: february cannot have 30 days 30(?!.02)| # d31 positive lookahead: month up to 31 days 31(?=.(?:0[13578]|10|12)) ) # eof day-check # month 01-12 .(?:0[1-9]|1[012]) # year 0000-9999 .\d{4} $ # end anchor
/
gmx
Comment: Leap Years are any year that can be evenly divided by 4
# (such as 2012, 2016, etc)
(such as 2012, 2016, etc)
Comment: (such as 2012, 2016, etc)
# except if it can be evenly divided by 100
• except if it can be evenly divided by 100
Comment: • except if it can be evenly divided by 100
# then it isn't (such as 2100, 2200, etc)
then it isn't (such as 2100, 2200, etc)
Comment: then it isn't (such as 2100, 2200, etc)
# except if it can be evenly divided by 400,
• except if it can be evenly divided by 400,
Comment: • except if it can be evenly divided by 400,
# then it is (such as 2000, 2400)
then it is (such as 2000, 2400)
Comment: then it is (such as 2000, 2400)
# https://www.mathsisfun.com/leap-years.html
https://www.mathsisfun.com/leap-years.html
Comment: https://www.mathsisfun.com/leap-years.html
# -------------------------------------------------
-------------------------------------------------
Comment: -------------------------------------------------
# verify date dd/mm/yyyy; possible separators: -.,/
verify date dd/mm/yyyy; possible separators: -.,/
Comment: verify date dd/mm/yyyy; possible separators: -.,/
# valid year range: 0000-9999
valid year range: 0000-9999
Comment: valid year range: 0000-9999
^ asserts position at start of a line
# start anchor
start anchor
Comment: start anchor
# precheck xx-xx-xxxx,... add new separators here
precheck xx-xx-xxxx,... add new separators here
Comment: precheck xx-xx-xxxx,... add new separators here
Positive Lookahead
(?=\d{2}([-.,\/])\d{2}\1\d{4}$)
Assert that the Regex below matches
Non-capturing group
(?: # day-check: non caturing group # days 01-28 0[1-9]|1\d|[2][0-8]| # february 29d check for leap year: all 4y / 00 years: only each 400 # 0400,0800,1200,1600,2000,... 29 (?!.02. # not if feb: if not ... (?! # 00 years: exclude !0 %400 years (?!(?:[02468][1-35-79]|[13579][0-13-57-9])00) # 00,04,08,12,... \d{2}(?:[02468][048]|[13579][26]) ) )| # d30 negative lookahead: february cannot have 30 days 30(?!.02)| # d31 positive lookahead: month up to 31 days 31(?=.(?:0[13578]|10|12)) )
# eof day-check
eof day-check
# month 01-12
month 01-12
. matches any character (except for line terminators)
Non-capturing group
(?:0[1-9]|1[012])
# year 0000-9999
year 0000-9999
. matches any character (except for line terminators)
\d
matches a digit (equivalent to [0-9])
$ asserts position at the end of a line
Comment: end anchor
Global pattern flags
g modifier: global. All matches (don't return after first match)
m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)
x modifier: extended. Spaces and text after a # in the pattern are ignored
Your regular expression does not match the subject string.Try launching the debugger to find out why.

Regular Expression
No Match

/
/
gmx

Test String