2012-06-11 5 views
1

Qt/KDE를 사용하여 응용 프로그램을 개발 중입니다. 이 코드를 작성하는 동안, 나는 (; 분리)와 같은 값을 포함하는 QString 내가 다른 QString로 확인해, 유형 및 이름과 같은 모든 속성을 읽을 필요가세미콜론을 읽는 방법 QString에서 특정 값을 분리 했습니까?

<http://example.com/example.ext.torrent>; rel=describedby; type="application/x-bittorrent"; name="differentname.ext" 

를 읽을 필요가있다. 내가 지금까지 촬영 한 apporach 내가 수동으로 텍스트를 찾고 그리고 경우 설정하고 속성의 존재에 의해서만 방해 (그리고 그 값)해야하는 경우이다이

if (line.contains("describedby")) { 
     m_reltype = "describedby" ; 
    } 
    if (line.contains("duplicate")) { 
     m_reltype = "duplicate"; 
    } 

같은 것입니다 속성이 있습니다. 그러나이 접근법은 실제 값을 QString에 저장해야하는 "유형"및 이름과 같은 속성에서는 실패합니다. 이 문자열은 구분 기호 ;에서 전체 문자열을 분할 한 다음 속성 또는 해당 값을 검색하여이를 수행 할 수 있음을 알고 있지만 더 명확하고 효율적인 방법을 알고 싶습니다.

+1

QString : 또한 정규식을 사용할 수 있습니다

id = str.mid(0,str.indexOf("=")); value = str.mid(str.indexOf("=")+1); 

: 값에서 식별자를 분리, 각각의 문자열의 경우 : 문자열

2 분할 .스플릿? QRegExp? – kol

답변

2

제가 알기로, 데이터는 항상 URL이 아닙니다. 그래서,

1 :

regexp = "^([a-z]+)\s*=\s*(.*)$"; 
id = \1 of the regexp; 
value = \2 of the regexp; 
2

rel, type 및 name과 같은 모든 속성을 다른 QString으로 읽어야합니다.

이 문자열은 항상 URL이 될 것이라고 확신하나요?

더 깨끗하고 효율적인 방법이 있는지 알고 싶습니다.

바퀴를 재발 명하지 마십시오. QURL::queryItems을 사용하면 이러한 쿼리 변수를 구문 분석하고 이름 - 값 쌍의 맵을 반환 할 수 있습니다.

그러나 문자열이 올바른 형식인지 확인하십시오 (QURL이이를 거부하지 않음).