2012-09-10 2 views
2

두 슬래시 (/)로 문자열을 분할 할 수있는 방법이 궁금합니다 (/) & 백 슬래시(). 예를 들어, 이러한 유형의 문자열;슬래시로 문자열 나누기

"X:/Blah/blah/" 
"X:\Blah\blah\" 

또한 슬래시가 혼합되어 있습니다.

"X:/Blah\blah/" 

각각의 경우의 대가로 & 작동합니다 : "X", "ㅋ"나는이 QRegExp, http://doc.qt.io/archives/qt-4.7/qregexp.html를 사용해야합니다하지만 난 그냥 확실하지 않다 믿는다 "ㅋ"

어떤 캐릭터 세트를 사용해야할까요?

답변

6
str.split(QRegExp("[/\\\\]")); 

정규식은 ] 문자를 탈출 백 슬래시 문자를 방지하기 위해 두 개의 백 슬래시를 필요로하고, C++은 \ 리터럴에 전달하는만큼 추가로 두 가지를 추가합니다.

+0

해답을 제공해 주셔서 감사합니다. 그러나 해쉬를 지원하지 않습니다. 슬래시 만 사용하십시오. 어떻게 백 슬래시를 지원받을 수 있습니까? – Danran

+0

내 테스트에서 백 슬래시로 작동합니다 ... – Chris

+0

내가 뭘 잘못했는지 봅니다. 내 경로에 단 하나의 백 슬래시가있는 문자열을 제공했습니다. 따라서 그것은 무시되고있었습니다. 아 글쎄, 나는 어쨌든 결국 백 슬래시로 모든 것을 바꾸기로 결정했지만 답을 주셔서 감사합니다. – Danran

3

파일 이름을 파싱하는 경우 QFileInfo를 사용하는 것이 어떻습니까?

QFileInfo fileInfo("c:\\test folder\\one\\test\\three.avi"); 

이렇게하면 모든 것이 슬래시로 변환됩니다. 때를 출력 절대 경로 :

qDebug() << fileInfo.absolutePath(); 

단지 앞으로있을 것이다이 같은 슬래시 출력 :

QStringList fileParts = fileInfo.absolutePath().split("/"); 
:

"C:/test folder/one/test" 

그런 다음 구성 요소를 얻을 수 있도록 정규 분할 명령을 사용할 수 있습니다

1

정규 표현식은 평가하기가 쉽기 때문에 더 나은 해결책은 문자를 대체 한 다음 분할하는 것입니다 (정규 표현식이 더 복잡하지 않다는 가정하에).

QString string = someFilePath(); 
//replace one char with another, requires no memory allocation 
string.replace('\\', '/', Qt::CaseSensitive); 
//you may want to use QString::KeepEmptyParts instead 
QStringList pathElements = string.split('/', QString::SkipEmptyParts, Qt::CaseSensitive); 

이렇게 정규 표현식을 컴파일하고 평가할 필요가 없습니다. 이것은 조금 더 빨라야합니다. 또한 QRegExp은 Qt 5에서 내부적으로 PCRE을 사용하는 새로운 클래스 QRegularExpression이있는 가장 일반적인 정규 표현식 구현이 아닙니다.