在C ++ 11 Regex中插入变量

时间:2013-12-11 13:34:02

标签: c++ regex c++11 string-interpolation

有没有办法在C ++ 11中将变量插入到正则表达式中?

例如,我想要这个正则表达式:^((?:\w+ ){$index})\w+
但是我必须编写所有这些代码来实现目标:

vector< char > stringIndex( numeric_limits< int >::digits10 + 2 );
_itoa_s( index, stringIndex.begin()._Ptr, stringIndex.size(), 10 );
const string stringRegex( "^((?:\\w+ ){" );
regex goal( stringRegex + stringIndex.begin()._Ptr + "})\\w+" );

当然有更好的方法!

1 个答案:

答案 0 :(得分:4)

使用std::to_string将整数转换为字符串。

regex goal( "^((?:\\w+ ){" + std::to_string(index) + "})\\w+" );

顺便说一下,您持续访问的_Ptr vector<T>::iterator成员是特定于实现的,并使您的代码无法移植。您应该使用vector::data成员函数。

此外,您可以使用raw string literals来避免所有其他反斜杠。

regex goal( R"reg(^((?:\w+ ){)reg" + std::to_string(index) + R"reg(})\w+)reg" );