Regular Expressions 101

Save & Share

Flavor

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

Function

  • Match
  • Substitution
  • List
  • Unit Tests
/
^(?:(\d+)\sYears?)?,?\s?(?:and\s)?(?:(\d+)\sMonths?)?,?\s?(?:and\s)?(?:(\d+)\sDays?)?$
/
gmi
^ asserts position at start of a line
Non-capturing group
(?:(\d+)\sYears?)?
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
1st Capturing Group
(\d+)
\d
matches a digit (equivalent to [0-9])
+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
\s matches any whitespace character (equivalent to [\r\n\t\f\v ])
Year
matches the characters Year literally (case insensitive)
s
matches the character s with index 11510 (7316 or 1638) literally (case insensitive)
,
matches the character , with index 4410 (2C16 or 548) literally (case insensitive)
\s
matches any whitespace character (equivalent to [\r\n\t\f\v ])
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
Non-capturing group
(?:and\s)?
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
and
matches the characters and literally (case insensitive)
\s matches any whitespace character (equivalent to [\r\n\t\f\v ])
Non-capturing group
(?:(\d+)\sMonths?)?
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
2nd Capturing Group
(\d+)
\d
matches a digit (equivalent to [0-9])
+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
\s matches any whitespace character (equivalent to [\r\n\t\f\v ])
Month
matches the characters Month literally (case insensitive)
s
matches the character s with index 11510 (7316 or 1638) literally (case insensitive)
,
matches the character , with index 4410 (2C16 or 548) literally (case insensitive)
\s
matches any whitespace character (equivalent to [\r\n\t\f\v ])
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
Non-capturing group
(?:and\s)?
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
and
matches the characters and literally (case insensitive)
\s matches any whitespace character (equivalent to [\r\n\t\f\v ])
Non-capturing group
(?:(\d+)\sDays?)?
? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
3rd Capturing Group
(\d+)
\d
matches a digit (equivalent to [0-9])
+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
\s matches any whitespace character (equivalent to [\r\n\t\f\v ])
Day
matches the characters Day literally (case insensitive)
s
matches the character s with index 11510 (7316 or 1638) literally (case insensitive)
$ asserts position at the end of a line
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)
i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])
Your regular expression does not match the subject string.Try launching the debugger to find out why.

Regular Expression
No Match

/
/
gmi

Test String