Я пытаюсь использовать расширения регулярного выражения ‘TR1’ для некоторого разбора строки C ++.
Я читал, что <regex>
для этого требуются заголовок и пространство имен std :: tr1
Я могу скомпилировать с <regex>
заголовок присутствует (хотя это заставляет меня использовать либо флаг, -std=c++0x
или же -std=gnu++0x
)
Тем не менее, когда я пытаюсь использовать std::tr1
namespace в моей программе, компиляция завершается неудачно с сообщением, что tr1 «не является именем пространства имен». Я не могу делать такие вещи, как,
std::tr1::regex rx("mypattern");
Я читал, что регулярные выражения TR1 поддерживаются начиная с gcc 4.3.0. Я использую g ++ через gcc 4.4.5.
Я что-то пропустил?
g ++ 4.7 пока не реализует регулярные выражения.
Но, несмотря на это, в C ++ 11 regex
был перемещен из пространства имен std::tr1
в std
, Итак, вместо std::tr1::regex
, ты должен написать std::regex
:
std::regex rx("mypattern");
Я не знаю, для каких версий g ++ до 4.7 это тоже относится. Но этот пример идеона прекрасно компилируется с g ++ 4.7. Однако помните, что реализация regex не реализована в этой версии компилятора.
Других решений пока нет …