Qt - wyrażenia regularne

Stronę tą wyświetlono już: 26 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:

Listing 1
  1. QString string("Post code 00-111 next post code 00-234");
  2. QRegularExpression re("\\d{2,2}\-\\d{3,3}");
  3. int index = string.indexOf(re);
  4. while(index != -1){
  5. qDebug() << string.mid(index, 6);
  6. index += 6;
  7. index = string.indexOf(re, index);
  8. }

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:

symbolopis
\aDopasowuje znak ASCII dzwonka (0x07)
\fDopasowuje znak ASCII (0x0C)
\nDopasowuje znak ASCII nowej linii (przynajmniej na systemach rodziny Unix) (0x0A)
\rDopasowuje znak ASCII powrotu karetki (0x0D)
\tDopasowuje znak ASCII poziomego tabulatora (0x09)
\vDopasowuje znak ASCII pionowego tabulatora (0x0B)
\xhhhhDopasowuje znak zapisany szesnastkowo w unicode (wartości pomiędzy 0x0000 a 0xFFFF)
\0oooDopasowuje znak ASCII jako ósemkową liczbę ooo (pomiędzy 0 a 0377)
. (kropka)Dopasowuje każdy pojedynczy znak (wliczając znak nowej linii)
\dDopasowuje pojedynczą cyfrę
\DDopasowuje każdy znak niebędący cyfrą
\sDopasowuje dowolny biały znak
\SDopasowuje dowolny znak nie będący znakiem białym
\wDopasowuje każdą cyfrę, literę lub znak dolnej spacji (_)
\WOdwrotność \w
\nN-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:

SymbolOpis
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:

Listing 2
  1. QString string("Post code 00-111 next post code 00-234");
  2. QRegularExpression re("\d{2,2}\-\d{3,3}");
  3. int index = 0;
  4. QRegularExpressionMatch match = re.match(string, index);
  5. while(match.hasMatch()){
  6. qDebug() << match.capturedTexts();
  7. index = match.capturedEnd();
  8. match = re.match(string, index);
  9. }
Strony powiązane
strony powiązane
  1. - opis klasy QRegularExpression w dokumentacji Qt

Komentarze