对此的答案可能很简单,但是这里......
我目前正在使用boost函数regex_match来根据正则表达式值计算字符串。
有没有办法找出多个连接语句中哪个元素被评估为真,而不是仅仅返回T / F?
例如:
^a$|^z$|^p$
a --> 0
z --> 1
f --> -1
答案 0 :(得分:2)
将它们包含在捕获括号中,然后测试哪个子表达式匹配。
(^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
三次更快,但确保你只需要测试它。除非你经常这样做 ,否则差别不值得担心。
显然,请确保您只设置一次正则表达式,而不是每次都需要它。
如果需要它真的非常快,你可能不应该使用正则表达式。
答案 1 :(得分:0)
如果您想分析与该详细程度匹配的文本,也许您应该考虑使用boost Spirit而不是正则表达式。