2013-05-07 2 views
2

파일의 따옴표 사이에 내용을 가져 오려고합니다. 정규식을 사용하고 있습니다. 당신이 볼 수 있듯이regex는 regex 테스터에서 작동하지만 C++에서는 작동하지 않습니다.

id=\"([^\"]+)\"|title=\"([^\"]+)\" 

, 모든 특수 문자가 이스케이프 : 이것은 내가 사용하고있는 정규 표현식입니다. regex 테스터에서 완벽하게 작동하지만, C++ 코드에서 사용될 때 제목을 찾을 수 없습니다. ID는 항상 잘 발견됩니다. (전 |) 나는 몇 가지 변화, 그리고 심지어 제거 절반을 시도

id="60973129" title="EPA" 

이것은 내가 사용하고 C++ 코드 :

std::regex rgx("id=\"([^\"]+)\"|title=\"([^\"]+)\""); 
std::smatch match; 

if (std::regex_search(line, match, rgx)) { 
    for (int i=0; i < match.size(); ++i) { 
      std::cout << match[i]; 
    } 
} 

편집 : 내가 발견 별도로, 넣어 경우 title=\"(.+?)\"이 작동하지만, 나중에 더 긴 라인을 스캔해야하기 때문에 필자는 여러 가지 정규식을 사용해야한다.

+0

실제로 사용되는 코드를 표시 할 수 있습니까? – JBL

+0

코드로 편집 됨. –

+1

이것은 문제는 아니지만 욕심이 아닌 반복을 사용하면 간단해질 수 있습니다. –

답변

1

아마도 "테스터 전체에서 일치합니까?"와는 달리 문자열 내에서 "일치하는 항목이 있습니다"라고 말하기 때문에 테스터에서 작동합니다.

어쨌든 | "또는", 하나 또는 다른 것을 찾으십시오. 표시된대로 문자열을 일치 시키려면 | 공백이나 공백의 양을 나타내는 지시자 (예 : [\ t] +)와 잘 일치 할 것입니다.

+0

'id = \ "([^ \"] +) \ "title = \" [\ t] + title = \ "([^ \"] +) \ "'id = \"([^ \ "] +) \" –