Enfermez les entre parenthèses capturant, puis test qui correspond sous-expression.
(^a$)|(^z$)|(^p$)
match_results m;
regex_match(..., m);
a ->m[1].matched
z ->m[2].matched
p ->m[3].matched
Mise à jour:
Vous pourriez être en mesure d'améliorer en faisant une seule capture grouper et tester le résultat, p.ex.:
^([azp])$
...
if ('a' == m[0][0]) ...
L'une ou l'autre des méthodes est presque certainement plus rapide que d'appeler regex_match
trois fois, bien que pour être sûr que vous avez juste à le tester. À moins que vous ne le fassiez souvent , la différence ne vaut pas la peine d'être inquiétée.
Évidemment, assurez-vous que vous ne configurez l'expression régulière qu'une seule fois, pas à chaque fois que vous en avez besoin.
Si vous avez besoin d'être vraiment, très vite, vous ne devriez probablement pas utiliser une regex.
Auriez-vous un aperçu des vitesses de votre solution par rapport à l'appel de regex_match à trois reprises? – tinkertime
Je pense que si vous êtes si préoccupé par la vitesse, vous devriez utiliser un lexer personnalisé (ou lex) au lieu d'une regex. Plus probablement, cela ne vaut pas la peine de s'inquiéter. –