2014-02-04 2 views
0

Я пытаюсь сделать следующий код для моего gcc 4.8.1, но я не могу. если вам нужна дополнительная информация, дайте мне знать. спасибо большоенужна помощь по C++ Regex

std::cmatch res; 
std::string str = "<h2>I'm a piece of text</h2>"; 
std::regex rx("<h(.)>([^<]+)"); 
std::regex_search(str.c_str(), res, rx); 
std::cout << res[1] << ". " << res[2] << "\n"; 

выход:

2. Egg prices 

в соответствии с Крисом, мне нужно ждать GCC 4.9. если это, как вы реализуете этот проект в текущем gcc (не boost)? Я хочу получить совпадения

Еще раз спасибо.

+0

Если вы используете libstdC++, он не будет поддерживать регулярное выражение до GCC 4.9. – chris

ответ

0

У меня нет повышающего окр теперь тест (я сделаю это как можно скорее), но если у вас есть, попробовать что-то вроде:

#include<boost/regex> 
#include<iostream> 
#include<string> 

int main(){ 

try{ 
    std::string str("<h2>I'm a piece of text</h2>"); 

    boost::regex rx("(<h[1-9]>)(.*)(<\\/h[1-9]>)"); 
    boost::sregex_iterator it(str.begin(), str.end(), rx); 

    std::cout << << (*it)[1] << "\n"; // get group 1 

return 0; 
} 

Regex 101 является источником для свободно validade вашего регулярного выражения!

+0

Я не могу использовать boost. есть ли у вас другое решение? Спасибо – cppython

+0

@cppython Чтобы использовать регулярное выражение, вам понадобится regex lib. Если у вас очень ограниченный сценарий (т. Е. Просто разборные теги заголовков), вы можете запрограммировать своего рода простой конечный автомат на основе 'std :: string :: substr',' std :: string :: find' и т. Д. Если вы хотите пойти этим путем, указать ограничения ввода, и я постараюсь помочь! –

0

В соответствии с сообщением об ошибке, вам нужно использовать другую библиотеку, например Boost.Regex

Если вы хотите, чтобы дезинфицировать HTML, вы должны рассмотреть возможность использования более специализированной техники. Я лично делаю это через jsoup. Gumbo может работать на C++. Также будет работать парсер XML.