c ++ boost regex哪个元素是真的

时间:2009-12-16 20:24:08

标签: c++ regex boost

对此的答案可能很简单,但是这里......

我目前正在使用boost函数regex_match来根据正则表达式值计算字符串。

有没有办法找出多个连接语句中哪个元素被评估为真,而不是仅仅返回T / F?

例如:

^a$|^z$|^p$

a --> 0
z --> 1
f --> -1

2 个答案:

答案 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而不是正则表达式。