Есть ли способ интерполировать переменную в регулярное выражение в 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+" );
Конечно, есть лучший способ!
использование 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" );
Других решений пока нет …