Интерполяция переменной в регулярном выражении C ++ 11

Есть ли способ интерполировать переменную в регулярное выражение в 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+" );

Конечно, есть лучший способ!

2

Решение

использование std::to_string преобразовать целое число в строку.

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

Кстати, _Ptr член vector<T>::iterator вы продолжаете получать доступ ко всему, это зависит от реализации и делает ваш код непереносимым. Вы должны использовать vector::data функция-член вместо.

Кроме того, вы можете избежать всех дополнительных обратных слешей, используя необработанные строковые литералы.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]