Заключите их в скобки, а затем проверьте, какое подвыражение соответствует.
(^a$)|(^z$)|(^p$)
match_results m;
regex_match(..., m);
a -> m[1].matched
z -> m[2].matched
p -> m[3].matched
Обновление:
Вы можете улучшить его, сделав одну группу захвата и протестировав результат, например ::
^([azp])$
...
if ('a' == m[0][0]) ...
Любой метод почти наверняка быстрее, чем трижды вызывать regex_match
, хотя, чтобы убедиться, что вам нужно просто проверить его. Если вы не делаете это действительно часто, то не стоит беспокоиться о разнице.
Очевидно, что вы устанавливаете регулярное выражение только один раз, а не каждый раз, когда вам это нужно.
Если нужно, чтобы это было действительно очень быстро, вам, вероятно, не следует использовать регулярное выражение.