2009-07-27 2 views
0

나는 많은 패턴을 지정하고, 문자열을 실행하고 모든 패턴의 일치하는 위치를 반환 할 수있는 C++ 용 정규 표현식 라이브러리 (또는 다른 라이브러리)를 찾고있다.C++에서 한 번에 여러 패턴의 모든 일치 항목을 반환하는 정규식 라이브러리입니까?

예를 들어

: 패턴 { "ABCD", "ABCD"} 문자열 { "ABCD ABCE의 ABCD"}

결과 : ABCD 일치 : 0-3, 11-14 ABCE 경기 : 5 9

누구나 이런 라이브러리를 알고 있습니까?

답변

2

나는 부스트 :: http://www.boost.org/doc/libs/1_39_0/doc/html/xpressive.html xpressive 좋습니다. 가능한 솔루션의

하나 :

string text = "abcd abce abcd"; 

static const sregex abcd = as_xpr("abcd"); // static - faster 
sregex abce = sregex::compile("abce") // compiled 
sregex all = *(keep(abcd) | keep(abce)); 

smatch what; 

if(regex_match(text, what, all)) 
{ 
    smatch::nested_results_type::const_iterator begin = what.nested_results().begin(); 
    smatch::nested_results_type::const_iterator end = what.nested_results().end(); 

    for(;it != end; it++) 
    { 
     if(it->regex_id() == abcd.regex_id()) 
     { 
      // you match abcd 
      // use it->begin() and it->end() 
      // or it->position() and it->length() 
      continue; 
     } 
     if(it->regex_id() == abce.regex_id()) 
     { 
      // you match abcd... 
      continue; 
     }; 

} 

내 생각은하지 않는 것이 좋습니다 솔루션, 당신은 설명서의 "의미 작업 및 사용자 정의 어설"을 확인 할 수 있습니다.

0

정규 표현식은 표준 확장 TR1의 일부와 나는 매우 간단는 주변의 코드를 직접 작성하는 생각 (즉, dinkumware)

표준 라이브러리의 숫자에서 구현됩니다.

0

또는과 같이 작동하지 않습니까?

"abcd|abcd" 

유효한 정규 표현식입니다.

+0

간단하거나 "abcd"또는 "abce"와 그 위치 만 찾을 수 있습니다. 위와 같은 경우 abcd의 위치 만 찾습니다. – HellSpam

+0

아니요, 또는 abcd | abce의 (변경)은 abcd 또는 abce가 일치하는 모든 위치를 찾아야합니다. – Avi

관련 문제