On a WordPress site
WordPress uses mod_rewrite to handle the URL routing (pretty URLs) - which I assume you are using - so you should avoid using a mod_alias redirect (
RedirectMatch, etc.) in this instance. (Different modules run at different times, regardless of the order of the directives in the .htaccess file, so you can get unexpected results/conflicts. mod_rewrite usually runs before mod_alias.)
In .htaccess it's easy enough to redirect
example.com/subdomain/parent-page/<anything>, but if you only want to redirect existing WordPress pages and 404 when that page does not exist then that is more complex and you should probably seek a WP solution, rather than .htaccess.
Try something like the following at the top of your
example.com/subdomain/.htaccess file. These directives must come before any existing WordPress routing directives.
RewriteRule ^parent-page/. /subdomain/parent-page [R=302,L]
302 (temporary) redirect to
301 (permanent) when you are sure it's working OK. (301's are cached by the browser so can make testing problematic.)
Any URL that starts
/subdomain/parent-page/<something> will be redirected (regardless of whether that sub-page exists or not). This also helps to avoid a redirect loop.
RewriteEngine only needs to appear once in the .htaccess file - preferably (more logical) at the top.
RedirectMatch 301 parent-page/?* example.com/subdomain/parent-page
Aside... There are a few things wrong here. The regex is not strictly valid.
* matches the preceding char 0 or more times (the preceding char is
?, which is itself a meta character). If you are specifying the domain in the target URL then it must be absolute with protocol etc.