2010-06-17 2 views
1

pcre ++ 라이브러리로 명명 된 부분 문자열을 캡처하고 싶습니다.pcre ++에서 캡처 된 부분 문자열 지정

pcre 라이브러리에는이 기능이 있지만 pcre ++에는이 기능이 구현되지 않았다는 것을 알고 있습니다.

이것은 내가 (단순한 예) 지금이되었다된다

pcrepp::Pcre regex("test (?P<groupName>bla)"); 

if (regex.search("test bla")) 
{ 
    // Get matched group by name 
    int pos = pcre_get_stringnumber(
     regex.get_pcre(), 
     "groupName" 
    ); 
    if (pos == PCRE_ERROR_NOSUBSTRING) return; 

    // Get match 
    std::string temp = regex[pos - 1]; 

    std::cout << "temp: " << temp << "\n"; 
} 

내가 디버깅 할 경우, POS 리턴 1, 그리고 그 권리 (? Pbla)는 번째 submatch (0은 전체입니다 시합). 괜찮을거야. 하지만 ... regex.matches()는 0을 반환합니다. 이유는 무엇입니까?

btw. pcre ++가 0으로 첫 번째 서브맵을 가리키는 결과를 다시 색인하기 때문에 나는 정규식을 수행하기 때문에 1. 1은 0, 2는 1, 3은 2 등이됩니다.

아무도이 문제를 해결하는 방법을 알고 있습니까? ?

+1

pcre ++는 불완전한 라이브러리인데 불완전한 라이브러리, ~ 6yrs의 릴리즈, 어색한 연산자 오버로딩, 서브맵 색인 생성의 절름발이 ... 직선 pcre로 가거나 Google RE2 (http : // 코드)를 다운로드하십시오. google.com/p/re2/) – Stephen

답변

0

내 실수는 불행히도, 내 실제 프로그램에서 정규식을 테스트하고 정규식이 다릅니다. 나는이 같은 것을 사용 :

(?:/(?P<controller>[^/]+)(?:/(?P<action>[^/]+))?)? 

그래서 숫자 변환 그룹 이름이 잘 어울리는,하지만 내가 그룹에 액세스하려고 할 때 나는 때문에의 범위의 인덱스를 얻을 (? : ...)? 여러 떼. 그룹 인덱스가 올바른 범위에 있다면 체크를 추가했습니다. 그룹을 사용할 수 있습니다.

죄송합니다.

관련 문제