Qt - wyrażenia regularne
Stronę tą wyświetlono już: 1559 razy
Wyrażenia regularne to zaawansowany system przetwarzania informacji tekstowych. Do tego celu w Qt służą dwie klasy: QRegExp i QRegularExpression, przy czym ta druga jest nowszą wersją tej pierwszej.
Przykład wykorzystania klasy QRegularExpression do znajdowania tekstu zawartego w obiekcie klasy QString
Za pomocą wyrażeń regularnych można wyszukiwać fragmenty tekstu znajdującego się w obiekcie klasy QString:
- QString string("Post code 00-111 next post code 00-234");
- QRegularExpression re("\\d{2,2}\-\\d{3,3}");
- int index = string.indexOf(re);
- while(index != -1){
- qDebug() << string.mid(index, 6);
- index += 6;
- index = string.indexOf(re, index);
- }
Powyższy kod wyciąga z tekstu numery kodów pocztowych, a wynikiem jego działania będzie:
"00-111" "00-234"
Wyrażenie \\d - oznacza cyfrę a następujące po nim {2,2} oznacza liczbę minimalną i maksymalną wystąpienia znaku.
Niektóre znaczniki używane w wyrażeniach regularnych
Dopasowanie wyszukiwanego elementu w tekście umożliwiają specjalne znaczniki, oto niektóre z nich:
symbol | opis |
---|---|
\a | Dopasowuje znak ASCII dzwonka (0x07) |
\f | Dopasowuje znak ASCII (0x0C) |
\n | Dopasowuje znak ASCII nowej linii (przynajmniej na systemach rodziny Unix) (0x0A) |
\r | Dopasowuje znak ASCII powrotu karetki (0x0D) |
\t | Dopasowuje znak ASCII poziomego tabulatora (0x09) |
\v | Dopasowuje znak ASCII pionowego tabulatora (0x0B) |
\xhhhh | Dopasowuje znak zapisany szesnastkowo w unicode (wartości pomiędzy 0x0000 a 0xFFFF) |
\0ooo | Dopasowuje znak ASCII jako ósemkową liczbę ooo (pomiędzy 0 a 0377) |
. (kropka) | Dopasowuje każdy pojedynczy znak (wliczając znak nowej linii) |
\d | Dopasowuje pojedynczą cyfrę |
\D | Dopasowuje każdy znak niebędący cyfrą |
\s | Dopasowuje dowolny biały znak |
\S | Dopasowuje dowolny znak nie będący znakiem białym |
\w | Dopasowuje każdą cyfrę, literę lub znak dolnej spacji (_) |
\W | Odwrotność \w |
\n | N-ta powrotna referencja np. \1, \2, itd |
Dopasowanie zestawów znaków
Wyrażenie regularne umożliwiają dopasowywanie zestawów znaków, oto przykłady:
Wyrażenie: | Opis |
---|---|
[] | Zapisane wewnątrz zestawy znaków będą wyszukiwane w tekście np. [abc] - będzie dopasowywało literę a, b lub c |
- | Umożliwia wraz z [] ustawienie zakresu znaków np. [a-z] - będzie dopasowywało małe litery od a do z |
^ | Umożliwia określenie zestawu znaków, które nie powinny wystąpić np. [^a-z] - będzie dopasowywało tylko znaki, które nie będą literami od a do z |
Kwantyfikatory wystąpienia znaków
Regularne wyrażenie również umożliwiają sterowanie liczebnością wystąpienia danego znaku we wzorcu. Oto lista kwantyfikatorów oznaczających powtarzalność znaku:
Symbol | Opis |
---|---|
x? | oznacza jedno lub zero wystąpień znaku x (równoznaczne z x{0,1} |
x+ | oznacza jedno lub więcej wystąpień znaku x (równoznaczne z x{1,} |
x* | oznacza zero lub więcej wystąpień znaku x (równoznaczne z x{0,} |
x{n} | oznacza dokładnie n wystąpień znaku x |
x{n,} | oznacza co najmniej n wystąpień znaku x |
x{,n} | oznacza co najwyżej n wystąpień znaku x |
x{n,m} | oznacza od n do m wystąpień znaku x |
Znajdowanie dopasowania za pomocą metody match klasy QRegularExpression
Zamiast metody klasy QString można wykorzystać metodę match klasy QRegularExpression np. w następujący sposób:
- QString string("Post code 00-111 next post code 00-234");
- QRegularExpression re("\d{2,2}\-\d{3,3}");
- int index = 0;
- QRegularExpressionMatch match = re.match(string, index);
- while(match.hasMatch()){
- qDebug() << match.capturedTexts();
- index = match.capturedEnd();
- match = re.match(string, index);
- }

Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski

Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz

Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha

Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams

Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis

Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół

Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz

Tytuł:
OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV
Autor:
Adrian Kaehler, Gary Bradski

Tytuł:
C++ w 24 godziny. Wydanie VI
Autor:
Rogers Cadenhead, Jesse Liberty

Tytuł:
C++ Optymalizacja kodu. Sprawdzone techniki zwiększania wydajności
Autor:
Guntheroth Kurt