Non-Capturing Group(?:(?=(?&V_Obj)){|(?!^)\G(?&Sep_Obj)\s*) 1st Alternative(?=(?&V_Obj)){ Positive Lookahead(?=(?&V_Obj)) (?&V_Obj)calls group V_Obj as a subroutine
{the literal { (12310 / 1738 / 7B16)
2nd Alternative(?!^)\G(?&Sep_Obj)\s* \Gstart of current search
(?&Sep_Obj)calls group Sep_Obj as a subroutine
\s*any whitespace character, repeated any number of times
Non-Capturing Group(?:(?&V_KeyVal)(?&Sep_Obj))*? *?repeats the group contents below any number of times:
(?&V_KeyVal)calls group V_KeyVal as a subroutine
(?&Sep_Obj)calls group Sep_Obj as a subroutine
\s*any whitespace character, repeated any number of times
(?&Str)calls group Str as a subroutine
\s*any whitespace character, repeated any number of times
:the literal : (5810 / 728 / 3A16)
\s*any whitespace character, repeated any number of times
\Kresets the starting point of the reported match. Any previously consumed characters are no longer included in the final match
(?&Numb)calls group Numb as a subroutine
Definition Group(?(DEFINE)(?<Sep_Ary>\s*(?:,(?!\s*[}\]])|(?=\])))(?<Sep_Obj>\s*(?:,(?!\s*[}\]])|(?=})))(?<Er_Obj>(?>{(?:\s*(?&Str)(?:\s*:(?:\s*(?:(?&Er_Value)|(?<Er_Ary>\[(?:\s*(?:(?&Er_Value)|(?&Er_Ary)|(?&Er_Obj))(?:(?&Sep_Ary)|(*ACCEPT)))*(?:\s*\]|(*ACCEPT)))|(?&Er_Obj))(?:(?&Sep_Obj)|(*ACCEPT))|(*ACCEPT))|(*ACCEPT)))*(?:\s*}|(*ACCEPT))))(?<Er_Value>(?>(?&Numb)|(?>true|false|null)|(?&Str)))(?<Str>(?>"[^\\"]*(?:\\[\s\S][^\\"]*)*"))(?<Numb>(?>[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?|(?:[eE][+-]?\d+)))(?<V_KeyVal>(?>\s*(?&Str)\s*:\s*(?&V_Value)\s*))(?<V_Value>(?>(?&Numb)|(?>true|false|null)|(?&Str)|(?&V_Obj)|(?&V_Ary)))(?<V_Ary>\[(?>\s*(?&V_Value)(?&Sep_Ary))*\s*\])(?<V_Obj>{(?>(?&V_KeyVal)(?&Sep_Obj))*\s*})) Group Sep_Ary(?<Sep_Ary>\s*(?:,(?!\s*[}\]])|(?=\]))) \s*any whitespace character, repeated any number of times
Non-Capturing Group(?:,(?!\s*[}\]])|(?=\])) 1st Alternative,(?!\s*[}\]]) ,the literal , (4410 / 548 / 2C16)
Negative Lookahead(?!\s*[}\]]) \s*any whitespace character, repeated any number of times
}the literal } (12510 / 1758 / 7D16)
\]the literal ] (9310 / 1358 / 5D16)
\]the literal ] (9310 / 1358 / 5D16)
Group Sep_Obj(?<Sep_Obj>\s*(?:,(?!\s*[}\]])|(?=}))) \s*any whitespace character, repeated any number of times
Non-Capturing Group(?:,(?!\s*[}\]])|(?=})) 1st Alternative,(?!\s*[}\]]) ,the literal , (4410 / 548 / 2C16)
Negative Lookahead(?!\s*[}\]]) \s*any whitespace character, repeated any number of times
}the literal } (12510 / 1758 / 7D16)
\]the literal ] (9310 / 1358 / 5D16)
}the literal } (12510 / 1758 / 7D16)
Group Er_Obj(?<Er_Obj>(?>{(?:\s*(?&Str)(?:\s*:(?:\s*(?:(?&Er_Value)|(?<Er_Ary>\[(?:\s*(?:(?&Er_Value)|(?&Er_Ary)|(?&Er_Obj))(?:(?&Sep_Ary)|(*ACCEPT)))*(?:\s*\]|(*ACCEPT)))|(?&Er_Obj))(?:(?&Sep_Obj)|(*ACCEPT))|(*ACCEPT))|(*ACCEPT)))*(?:\s*}|(*ACCEPT)))) Atomic Group(?>{(?:\s*(?&Str)(?:\s*:(?:\s*(?:(?&Er_Value)|(?<Er_Ary>\[(?:\s*(?:(?&Er_Value)|(?&Er_Ary)|(?&Er_Obj))(?:(?&Sep_Ary)|(*ACCEPT)))*(?:\s*\]|(*ACCEPT)))|(?&Er_Obj))(?:(?&Sep_Obj)|(*ACCEPT))|(*ACCEPT))|(*ACCEPT)))*(?:\s*}|(*ACCEPT))) {the literal { (12310 / 1738 / 7B16)
Non-Capturing Group(?:\s*(?&Str)(?:\s*:(?:\s*(?:(?&Er_Value)|(?<Er_Ary>\[(?:\s*(?:(?&Er_Value)|(?&Er_Ary)|(?&Er_Obj))(?:(?&Sep_Ary)|(*ACCEPT)))*(?:\s*\]|(*ACCEPT)))|(?&Er_Obj))(?:(?&Sep_Obj)|(*ACCEPT))|(*ACCEPT))|(*ACCEPT)))* *repeats the group contents below any number of times:
\s*any whitespace character, repeated any number of times
(?&Str)calls group Str as a subroutine
Non-Capturing Group(?:\s*:(?:\s*(?:(?&Er_Value)|(?<Er_Ary>\[(?:\s*(?:(?&Er_Value)|(?&Er_Ary)|(?&Er_Obj))(?:(?&Sep_Ary)|(*ACCEPT)))*(?:\s*\]|(*ACCEPT)))|(?&Er_Obj))(?:(?&Sep_Obj)|(*ACCEPT))|(*ACCEPT))|(*ACCEPT)) 1st Alternative\s*:(?:\s*(?:(?&Er_Value)|(?<Er_Ary>\[(?:\s*(?:(?&Er_Value)|(?&Er_Ary)|(?&Er_Obj))(?:(?&Sep_Ary)|(*ACCEPT)))*(?:\s*\]|(*ACCEPT)))|(?&Er_Obj))(?:(?&Sep_Obj)|(*ACCEPT))|(*ACCEPT)) Non-Capturing Group(?:\s*}|(*ACCEPT)) Group Er_Value(?<Er_Value>(?>(?&Numb)|(?>true|false|null)|(?&Str))) Group Str(?<Str>(?>"[^\\"]*(?:\\[\s\S][^\\"]*)*")) Group Numb(?<Numb>(?>[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?|(?:[eE][+-]?\d+))) Group V_KeyVal(?<V_KeyVal>(?>\s*(?&Str)\s*:\s*(?&V_Value)\s*)) Group V_Value(?<V_Value>(?>(?&Numb)|(?>true|false|null)|(?&Str)|(?&V_Obj)|(?&V_Ary))) Group V_Ary(?<V_Ary>\[(?>\s*(?&V_Value)(?&Sep_Ary))*\s*\]) Group V_Obj(?<V_Obj>{(?>(?&V_KeyVal)(?&Sep_Obj))*\s*}) 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