Qt 5.0 정규 표현 식 QRegularExpression 사용

3147 단어 Qt정규 표현 식
QRegularExpression 은 Qt 5.0 에서 도입 한 것 으로 QRegExp 에 비해 QRegularExpression class 는 많은 bug 를 복원 하여 효율 을 높 였 으 며 Perl 의 RegEx 에 대해 거의 전면적으로 호 환 되 는 검색엔진 을 제공 하 였 다.쉽게 말 하면 QRegExp 는 오랫동안 수 리 를 하지 않 아 bug 가 많 으 므 로 사용 할 때 QRegularExpression 을 사용 하 는 것 을 권장 합 니 다.
먼저 코드 를 올 리 고 뒤에 함수 소개:
    QRegularExpression regularExpression(pattern);
    int index = 0;
    QRegularExpressionMatch match;
    do {
        match = regularExpression.match(testStr, index);
        if(match.hasMatch()) {
            index = match.capturedEnd();
            qDebug()<

1.QRegExp 와 의 주요 용법 차이
QRegExp 의 일치 결 과 는 QRegExp 대상 자체 에 저 장 됩 니 다.
QString QRegExp::cap(int nth = 0) const;

한편,QRegularExpression 류 는 검색 에 만 사용 되 고 검색 결 과 를 단일 하 게 열거 하여 QRegularExpressionMatch 가 됩 니 다.
QString QRegularExpressionMatch::captured(int nth = 0) const;

추측:이래 로 QRegularExpression 검색 의 부담 이 줄 어 들 고 효율 이 높아진다.
함수 소개
1.match() 일치:
    QRegularExpressionMatch match(const QString &subject,
                                  int offset                = 0,
                                  MatchType matchType       = NormalMatch,
                                  MatchOptions matchOptions = NoMatchOption) const;

subject  일치 하 는 대상 문자열;
offset 오프셋,시작 위치 일치;
MatchType 일치 하 는 형식;
MatchOption 일치 옵션;
값 이 일치 하 는 결과 대상 되 돌리 기;
2. 일치 하 는 주요 결과:
QString captured(int nth = 0) const;
int capturedStart(int nth = 0) const;
int capturedLength(int nth = 0) const;
int capturedEnd(int nth = 0) const;

일치 하 는 문자열,일치 하 는 문자열 의 시작 점,길이,끝 입 니 다.
메모:매개 매 칭 세그먼트(정규 표현 식 의 모든 괄호)의 문자열 과 길이,시작 점 을 가 져 올 수 있 는 매개 변 수 를 가 져 옵 니 다.
captured()함 수 는 QRegExp::cap()와 기본적으로 일치 하지만 세 개의 함 수 를 추가 하여 매 칭 세그먼트 의 위 치 를 되 돌려 줍 니 다.
예 를 들 어 정규 pattern 은'(\\w+)(\\\d+)'이다.
match.captured()는 정규 일치 결 과 를 가 져 옵 니 다.결 성 된 매개 변 수 는 0 입 니 다.
match.captured(1)는 일치 하 는 결 과 를 가 져 오고 알파벳 을 되 돌려 줍 니 다.
match.captured Start(1)전체 문자열 의 시작 위치 에 이 알파벳 가 져 오기;
match.captured(2)는 일치 하 는 결 과 를 가 져 오고 숫자 를 되 돌려 줍 니 다.
match.captured End(2)이 알파벳 을 전체 문자열 의 끝 위치 에 가 져 옵 니 다.
3. captureEnd()
int QRegularExpressionMatch::capturedEnd(int nth = 0) const;

QRegExp 는 반복 해서 일치 하 는 문자열 의 길이 와 일치 하 는 위치 만 얻 을 수 있 습 니 다.다음 순환 의 일치 기점 은 수 동 으로 처리 해 야 합 니 다(추가):
int pos = 0;
while ((pos = rx.indexIn(trl , pos)) != -1)
{
    pos += rx.matchedLength();
    qDebug() << rx.cap();
}

현재 QRegularExpression 은 match.captureEnd()로 다음 에 옮 겨 다 니 는 시작 검색 위치 로 값 을 되 돌려 줍 니 다.
4.capturedTexts()
QStringList capturedTexts() const;

Patern 에 있 는 순서대로 각 매 칭 세그먼트 의 QStringList 를 되 돌려 줍 니 다.
즉,captured(1),captured(2),captured(3),등 모든 일치 세그먼트 결과 의 QStringList 입 니 다.
5.lastCapturedIndex()
마지막 일치 세그먼트 의 색인,즉 모든 일치 세그먼트 의 수량;
QRegularExpressionMatch match = re.match(string);
for (int i = 0; i <= match.lastCapturedIndex(); ++i) {
      QString captured = match.captured(i);
      // ...
}

좋은 웹페이지 즐겨찾기