In addition:
if non-captured brackets replaces with captired ones, then result became
"MATCH":
PCRE version 8.11 2010-12-10
/\A.*?(a|b(*THEN)c)/
ba
0: ba
1: a
another example of this issue is:
PCRE version 8.11 2010-12-10
/\A(?!(?:a(*THEN)b))/
ac
No match
PCRE version 8.11 2010-12-10
/\A(?!(a(*THEN)b))/
ac
0: