Group 1((?:(?P<p1>\((?:[^\(\)]|(?&p1))*\))|(?P<p2>[\w\.]))+) Non-Capturing Group(?:(?P<p1>\((?:[^\(\)]|(?&p1))*\))|(?P<p2>[\w\.]))+ +repeats the group contents below at least once:
1st Alternative(?P<p1>\((?:[^\(\)]|(?&p1))*\)) Group p1(?P<p1>\((?:[^\(\)]|(?&p1))*\)) \(the literal ( (4010 / 508 / 2816)
Non-Capturing Group(?:[^\(\)]|(?&p1))* *repeats the group contents below any number of times:
Negated Character Class[^\(\)] \(the literal ( (4010 / 508 / 2816)
\)the literal ) (4110 / 518 / 2916)
(?&p1)calls group p1 as a subroutine
\)the literal ) (4110 / 518 / 2916)
2nd Alternative(?P<p2>[\w\.]) \wany word character
\.the literal . (4610 / 568 / 2E16)
\s*any whitespace character, repeated any number of times
!the literal ! (3310 / 418 / 2116)
=the literal = (6110 / 758 / 3D16)
=the literal = (6110 / 758 / 3D16)
\s*any whitespace character, repeated any number of times
Group 4((?:(?&p1)|(?&p2))+) Non-Capturing Group(?:(?&p1)|(?&p2))+ +repeats the group contents below at least once:
(?&p1)calls group p1 as a subroutine
(?&p2)calls group p2 as a subroutine
g modifier: global. Finds all matches instead of stopping after the first
m modifier: multiline. Causes ^ and $ to match the start and end of each line, not only the start and end of the string