Is _[___, a, ___]_ a regex-like syntax?
It's a good idea to examine the FullForm of things when trying to figure out pattern-matching:
FullForm[ _[___,a,___]_ ]
(* Times[Blank[], Blank[][BlankNullSequence[],a,BlankNullSequence[]]] *)
Since Blank[] and _ are the same, and BlankNullSequence[] and ___ are the same, the form can be written as the following, using * to indicate the head Times:
_ * _[___, a, ___]
It is probably clear that _[___, a, ___] matches any expression with any head and a as one of its arguments, like Power[x, a] in the test expression Times[Power[x, a], Power[y, b], Power[z, c]]. Probably less clear are the implications for pattern-matching because Times has the attributes Flat and Orderless. The test expression Times[Power[x, a], Power[y, b], Power[z, c]] is equivalent to
Times[ Times[Power[y, b], Power[z, c]], Power[x, a] ]
And therefore, the blank _ before the Times symbol * can match Times[Power[y, b], Power[z, c]]
while the _[___, a, ___] after the Times symbol matches the other factor Power[x, a].
This is why one gets
MatchQ[Times[Power[x, a], Power[y, b], Power[z, c]], _[___, a, ___]_]
(* True *)