使用boost.xpressive以可变的最小/最大重复

时间:2019-07-12 16:22:43

标签: boost-xpressive

我正在使用boost.xpressive静态模板来构造正则表达式,这些正则表达式将动态地连接成最终表达式。

动态版本具有可变宽度的重复,但是由于要在int向量中进行操作,因此我确实需要使用静态构造。

我确实需要创建repeat<N,M>,其中NM不是常数。

如何做到?

1 个答案:

答案 0 :(得分:0)

不幸的是,C ++仅允许您传递在编译时(请参阅here)(也称为constant expressions)已知的模板参数。

在这种情况下,这意味着输入到repeat<N, M>中的值必须是文字或常量表达式,因此您不能只输入程序中的任何int

很难在不看到任何代码的情况下给出更具体的建议,但是似乎您正在尝试创建一个正则表达式,该正则表达式例如与某组/文字的n重复匹配,而n不是尚未在编译时知道(即,取决于程序的某些输入)。

这似乎是一个奇怪的用例,毕竟,正则表达式通常是编译时间常数(这是boost-xpressive存在的原因)。

我建议改为使用动态(普通)正则表达式。无论如何,都会对正则表达式进行编译(已对其进行预处理以加快匹配速度)。

通常,一次生成一个正则表达式,然后多次使用它来匹配不同的字符串。因此,就性能而言,预处理步骤通常可以忽略不计。