2014-10-28 4 views
0

나는 다음과 같은 여러 개의 태그 내의 텍스트를 얻기 위해 노력하고 있어요 :QRegularExpression - 두 <ca> 태그 사이에서 문자열을 추출하는 방법?

텍스트 파일 : 내 코드에서

Internal Auto-Configured Settings File 
________________________________________ 
((Do not attempt to edit it manually)) 
________________________________________ 
# Saved certifications: 
<ca> 
Text which I want to extract 
</ca> 
... 
<cert>Another text I want to extract</cert> 
... 

내가 이전 파일을 열고으로 그 내용 & 저장 읽어 a QString.

QRegularExpression regex("<ca>(.*)</ca>", QRegularExpression::MultilineOption); 
QRegularExpressionMatch match = regex.match(content); 
QString ca = match.captured(1); 

qDebug() << ca; 
qDebug() << "\n\nDone!!"; 

< <

은 또한 <cert> 위해 동일을했다하지만 난 모두 빈 문자열을 얻을 : 지금까지 나는 어떤 성공없이 다음과 같은 일을했습니다.

+0

있으면 단일 회선 옵션을 사용하십시오. 이름은 끔찍하지만 한 줄 옵션을 사용하면'.'는 줄 바꿈 문자와 일치합니다. – nhahtdh

답변

0

, QRegularExpression::DotMatchesEverythingOption를 사용합니다. 이 문제는 기본 모드에서 .이 줄 바꿈 문자와 일치하지 않기 때문에 발생합니다.

문서를 인용 : 패턴 문자열의 점 메타 문자 (.)가 개행 문자 (일반적으로 점은 줄 바꿈과 일치하지 않음)을 포함하여, 주제 문자열의 모든 문자와 일치하도록 허용

. 이 옵션은 Perl 정규 표현식의 /s 수정 자에 해당합니다.

</ca>이 입력에 한 번만 표시되는지 확인하십시오. 그런 경우가 아닌 경우

, 당신의 표현 조금 수정 :

"<ca>(.*?)</ca>" 

이 게으른 한정사 (대신 욕심 기본값) 수를, 그리고 가장 가까운 닫는 태그 </ca> 일치됩니다.

+0

태그 ()와 함께 내부 텍스트를 가져오고 싶다면, 고마워요. –

+0

코드가 이미이 작업을 수행하면 안됩니까? 모든 것은 메인 매치'captured()'로 사용 가능합니다. – nhahtdh

0
<ca>(.*?)<\/ca>|<cert>(.*?)<\/cert> 

당신은 this.Do 더 플래그를 s 또는 DOTALL을 추가하는 것을 잊지 시도 할 수 있습니다.

데모보기 대신 QRegularExpression::MultilineOption

http://regex101.com/r/sU3fA2/30

+0

두 개의 태그로 캡쳐하고 싶다면 어떻게해야합니까? –

관련 문제