2012-04-15 2 views
0

(정규식),이 솔루션은 각 경기C++ 여러 문자열 내가 부스트 :: 정규식 문제가

boost::regex regex("id=\"(.*?)\""); // should I use this "id=\"(.*?)\"(.*?)<value>(.*?)</value>"? 
boost::sregex_token_iterator iter(xml.begin(), xml.end(), regex, 1); // 1 because I just need text inside quotes 
boost::sregex_token_iterator end; 

에서 하나 개의 결과 만 작동 그래버 이제 구문 분석 문자열은

<x id="first"> 
<value>5</value> 
</x> 
<x id="second"> 
<value>56</value> 
</x> 
etc... 

이제 질문은 한 번에 ID와 값을 구문 분석하는 방법을 잡아 둘 다 내부 루프

for(; iter != end; ++iter) { 
    std::string id(iter->first, iter->second); 
    std::string value(?????); 
} 
+0

당신은 XML을 DOM XML 또는 다소 정규식이 아닌 구문 분석하는 것이 좋습니다. – kirilloid

답변

1

Boost.PropertyTree는 XM이 포함 일치 당신은 regexes 대신 사용할 수 있습니다 :

#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/xml_parser.hpp> 
#include <boost/foreach.hpp> 
...  
using boost::property_tree::ptree; 
ptree pt; 
read_xml(istreamOrFilename, pt); 
BOOST_FOREACH(ptree::value_type &v, pt) { 
    std::string id(v.second.get<std::string>("<xmlattr>.id")); 
    std::string value(v.second.get<std::string>("value").data());  
} 
관련 문제