1. Question marks cannot occur in the path of the URL. Anything after the question mark is, by definition, a query.
2. mod_alias (Redirect by that name) doesn't do query strings. For that you need mod_rewrite (RewriteRule with [R] flag)
Earlier posts suggest you don't like this answer. But where Apache is concerned, you can dislike things until the cows come home. The facts won't change :(
A redirect of any kind-- mod_alias, mod_rewrite, php script-- isn't about "old" files and "new" files. It's about "pattern" and "target". A request is compared against the pattern; if it matches, the rule points to the target. Ordinarily the rule doesn't know and doesn't care whether either of the two physically exists.
It may help if you go back and explain in English* exactly what the requests looks like before they get redirected. Is there a short list of specific URLs? Or is there a large group of potential URLs that all fit into some pattern?
* I realize this is not your native language. But your English is better than my Hindi, Bengali or Punjabi. Trust me on this.
In a URL a ? indicates information to be sent to the file being requested [in regular exressions, unless the ? escaped EG \? it mean 0 or 1 of the preceding]. A ? in a URL is not part of the file path itself, so the server won't ever look for the file abcd?.php, it will only look for the file abcd and if it's present the server will make the variable .php [as well as any information following an =] available to the file being processed.
RedirectMatches and RewriteRules only match the file being requested. They do not try to match the information sent to the file to be processed, so they don't "see" a ? in a URL.
To match a ? followed by anything [or nothing or not present in this case] in a request, we need to check the file requested with a RewriteRule and then use a Condition [RewriteCond] to check for [in this case it appears optionally] a literal ? followed by anything or nothing and redirect even if a ? is not present.