# Regular Expressions 101

## Flavor

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

• Match
• Substitution
• List
• Unit Tests

## Tools

"
(?:\b|^)((?:(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))\.){3}(?:(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))))(?:\b|\$)
"
g
Non-capturing group
(?:\b|^)
1st Alternative
\b
\b assert position at a word boundary: (^\w|\w\$|\W\w|\w\W)
2nd Alternative
^
^ asserts position at start of the string
1st Capturing Group
((?:(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))\.){3}(?:(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))))
Non-capturing group
(?:(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))\.){3}
{3} matches the previous token exactly 3 times
Non-capturing group
(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))
1st Alternative
(?:\d)
Non-capturing group
(?:\d)
\d matches a digit (equivalent to [0-9])
2nd Alternative
(?:\d{2})
Non-capturing group
(?:\d{2})
\d
matches a digit (equivalent to [0-9])
{2} matches the previous token exactly 2 times
3rd Alternative
(?:1\d{2})
Non-capturing group
(?:1\d{2})
1 matches the character 1 with index 4910 (3116 or 618) literally (case sensitive)
\d
matches a digit (equivalent to [0-9])
{2} matches the previous token exactly 2 times
4th Alternative
(?:2[0-4]\d)
Non-capturing group
(?:2[0-4]\d)
2 matches the character 2 with index 5010 (3216 or 628) literally (case sensitive)
Match a single character present in the list below
[0-4]
0-4 matches a single character in the range between 0 (index 48) and 4 (index 52) (case sensitive)
\d matches a digit (equivalent to [0-9])
5th Alternative
(?:25[0-5])
Non-capturing group
(?:25[0-5])
25
matches the characters 25 literally (case sensitive)
Match a single character present in the list below
[0-5]
0-5 matches a single character in the range between 0 (index 48) and 5 (index 53) (case sensitive)
\. matches the character . with index 4610 (2E16 or 568) literally (case sensitive)
Non-capturing group
(?:(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5])))
Non-capturing group
(?:(?:\d)|(?:\d{2})|(?:1\d{2})|(?:2[0-4]\d)|(?:25[0-5]))
1st Alternative
(?:\d)
Non-capturing group
(?:\d)
\d matches a digit (equivalent to [0-9])
2nd Alternative
(?:\d{2})
Non-capturing group
(?:\d{2})
\d
matches a digit (equivalent to [0-9])
{2} matches the previous token exactly 2 times
3rd Alternative
(?:1\d{2})
Non-capturing group
(?:1\d{2})
1 matches the character 1 with index 4910 (3116 or 618) literally (case sensitive)
\d
matches a digit (equivalent to [0-9])
{2} matches the previous token exactly 2 times
4th Alternative
(?:2[0-4]\d)
Non-capturing group
(?:2[0-4]\d)
2 matches the character 2 with index 5010 (3216 or 628) literally (case sensitive)
Match a single character present in the list below
[0-4]
0-4 matches a single character in the range between 0 (index 48) and 4 (index 52) (case sensitive)
\d matches a digit (equivalent to [0-9])
5th Alternative
(?:25[0-5])
Non-capturing group
(?:25[0-5])
25
matches the characters 25 literally (case sensitive)
Match a single character present in the list below
[0-5]
0-5 matches a single character in the range between 0 (index 48) and 5 (index 53) (case sensitive)
Non-capturing group
(?:\b|\$)
1st Alternative
\b
\b assert position at a word boundary: (^\w|\w\$|\W\w|\w\W)
2nd Alternative
\$
\$ asserts position at the end of the string, or before the line terminator right at the end of the string (if any)
Global pattern flags
g modifier: global. All matches (don't return after first match)
Your regular expression does not match the subject string.

r"
"
g