c regex tutorial regular expressions c with examples
Samouczek dotyczący wyrażeń regularnych C ++ lub wyrażeń regularnych wyjaśnia działanie wyrażenia regularnego w C ++, w tym funkcjonalność dopasowania, wyszukiwania, zamiany, sprawdzania poprawności danych wejściowych i tokenizacji:
Wyrażenia regularne lub wyrażenia regularne lub wyrażenia regularne, jak są powszechnie nazywane, są używane do reprezentowania określonego wzorca ciągu lub tekstu. Regeksy są często używane do oznaczania standardowej tekstowej składni ciągu.
=> Odwiedź tutaj, aby zobaczyć serię szkoleń C ++ dla wszystkich.
Każdy znak w wyrażeniu regularnym ma albo znak o znaczeniu dosłownym, albo „metaznak” o specjalnym znaczeniu.
Na przykład , wyrażenie regularne „a (a-z)” może mieć wartości „aa”, „ab”, „ax” itd. W tym przypadku a ma znaczenie dosłowne, a (a-z) oznacza dowolną małą literę od a do z.
Oczywiście powyższy przykład jest najprostszy. Możemy mieć wyrażenie regularne z bardziej złożonymi wzorcami do dopasowania.
Prawie wszystkie języki programowania obsługują wyrażenia regularne. C ++ ma bezpośrednie wsparcie dla wyrażeń regularnych począwszy od C ++ 11. Oprócz języków programowania większość programów do przetwarzania tekstu, takich jak leksery, zaawansowane edytory tekstu itp., Korzysta z wyrażeń regularnych.
W tym samouczku omówimy ogólnie szczegóły wyrażeń regularnych, a także w odniesieniu do programowania w C ++.
Czego się nauczysz:
- Wyrażenie regularne (regex) w C ++
- Szablony funkcji używane w wyrażeniu regularnym C ++
- Walidacja danych wejściowych C ++
- Wniosek
Wyrażenie regularne (regex) w C ++
Wyrażenie regularne lub regex to wyrażenie zawierające sekwencję znaków, które definiują określony wzorzec wyszukiwania, którego można użyć w algorytmach wyszukiwania ciągów, algorytmach wyszukiwania lub znajdowania / zamieniania itp. Regeksy są również używane do sprawdzania poprawności danych wejściowych.
Większość języków programowania zapewnia wbudowaną możliwość obsługi wyrażeń regularnych lub bibliotek. Począwszy od C ++ 11, C ++ zapewnia obsługę wyrażeń regularnych za pomocą standardowej biblioteki w nagłówku.
Procesor regex, który jest używany do analizowania wyrażenia regularnego, tłumaczy je na wewnętrzną reprezentację, która jest wykonywana i dopasowywana do ciągu reprezentującego przeszukiwany tekst. C ++ 11 używa gramatyki ECMAScript jako domyślnej gramatyki dla wyrażeń regularnych. ECMAScript jest prosty, ale zapewnia potężne możliwości regex.
Zobaczmy niektóre wzorce, które określamy w wyrażeniu regularnym, takie jak specyfikacja zakresu, powtarzane wzorce itp.
Specyfikacje zakresu
Określanie zakresu znaków lub literałów jest jednym z najprostszych kryteriów używanych w wyrażeniu regularnym.
Na przykład, możemy określić zakres małych liter od a do z w następujący sposób:
(a – z)
Dopasuje dokładnie jedną małą literę.
Następujące kryteria,
(A-Za-z0-9)
Powyższe wyrażenie określa zakres zawierający jedną wielką literę, jedną małą literę i cyfrę od 0 do 9.
Nawiasy (()) w powyższych wyrażeniach mają specjalne znaczenie, tj. Służą do określenia zakresu. Jeśli chcesz dołączyć nawias jako część wyrażenia, musisz go opuścić.
Więc poniższe wyrażenie,
( (0–9)
Powyższe wyrażenie wskazuje nawias otwierający i cyfrę z zakresu od 0 do 9 jako wyrażenie regularne.
Ale zauważ, że ponieważ programujemy w C ++, musimy użyć specyficznej dla C ++ sekwencji ucieczki w następujący sposób:
(\ (0–9)
Powtarzający się wzór
Przykłady zakresów, które wymieniliśmy powyżej, pasują tylko do jednego znaku lub literału. Jeśli chcemy dopasować więcej niż jeden znak, zwykle określamy „modyfikator wyrażenia” wraz ze wzorcem, czyniąc go tym samym powtarzającym się wzorcem.
Modyfikatorem wyrażenia może być „+”, który sugeruje dopasowanie wystąpienia wzorca raz lub więcej razy, lub „*”, co sugeruje dopasowanie wystąpienia wzorca zero lub więcej razy.
Na przykład,następujące wyrażenie,
(a-z) + dopasowuje ciągi takie jak a, aaa, abcd, softwaretestinghelp itp. Zauważ, że nigdy nie będzie pasować do pustego łańcucha.
Ekspresja,
(a – z) * dopasuje pusty ciąg lub dowolny z powyższych ciągów.
Jeśli chcesz określić grupę znaków do dopasowania raz lub więcej razy, możesz użyć nawiasów w następujący sposób:
(Xyz) +
Powyższe wyrażenie będzie pasować do Xyz, XyzXyz i XyzXyzXyz itp.
Przykład wyrażenia regularnego w C ++
Rozważmy wyrażenie regularne pasujące do nazwy pliku MS-DOS, jak pokazano poniżej.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Powyższe wyrażenie regularne można interpretować w następujący sposób:
Dopasuj literę (mała, a następnie duża) lub podkreślenie. Następnie dopasuj zero lub więcej znaków, z których każdy może być literą, podkreśleniem lub cyfrą. Następnie dopasuj literową kropkę (.). Po kropce dopasuj jeden lub więcej znaków, z których każdy może być literą lub cyfrą wskazującą rozszerzenie pliku.
Szablony funkcji używane w wyrażeniu regularnym C ++
Omówmy teraz niektóre z ważnych szablonów funkcji podczas programowania wyrażeń regularnych w C ++.
regex_match ()
Ten szablon funkcji służy do dopasowania podanego wzorca. Ta funkcja zwraca prawdę, jeśli dane wyrażenie pasuje do ciągu. W przeciwnym razie funkcja zwraca false.
Poniżej znajduje się przykład programowania w C ++, który demonstruje funkcję regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Wynik:
W powyższym programie najpierw dopasowujemy ciąg „softwareTesting” do wyrażenia regularnego „(„ (soft) (. *) ”Za pomocą funkcji regex_match. Następnie demonstrujemy również różne warianty regex_match, przekazując mu obiekt typu string, zakres itp.
regex_search ()
Funkcja regex_search () służy do wyszukiwania wzorca w ciągu, który pasuje do wyrażenia regularnego.
Rozważmy następujący program C ++, który pokazuje użycie funkcji regex_search ().
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< Wynik:
Określamy ciąg, a następnie wyrażenie regularne za pomocą obiektu regex. Ten ciąg i wyrażenie regularne są przekazywane do funkcji regex_search wraz z typem flagi smatch. Funkcja wyszukuje pierwsze wystąpienie wzorca w ciągu wejściowym i zwraca dopasowany ciąg.
regex_replace ()
Funkcja regex_replace () jest używana do zastąpienia wzorca pasującego do wyrażenia regularnego łańcuchem.
Użyjmy programu w C ++, aby zademonstrować funkcję regex_replace ().
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Wynik:
Tutaj mamy ciąg wejściowy. Dostarczamy wyrażenie regularne do dopasowania ciągu zaczynającego się od „p”. Następnie zastępujemy dopasowane słowo słowem „witryna internetowa”. Następnie zamieniamy słowo „witryna” z powrotem na portal.
Walidacja danych wejściowych C ++
Omówiliśmy główne szablony funkcji, które są używane do dopasowywania wzorców przy użyciu wyrażenia regularnego. Warto zauważyć, że głównym celem, do którego służy wyrażenie regularne, jest walidacja danych wejściowych. Możesz sprawdzić poprawność danych wejściowych wprowadzonych ze standardowego urządzenia wejściowego za pomocą wyrażenia regularnego.
Sprawdź poniższy program, aby zademonstrować, jak możesz użyć wyrażenia regularnego do walidacji przychodzących danych.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< Wynik:
Ten program dopasowuje dane wejściowe wprowadzone przez użytkownika w celu sprawdzenia, czy jest to liczba całkowita. Powyższe dane wyjściowe pokazują, że wprowadzenie liczby całkowitej daje odpowiedni komunikat, a po wprowadzeniu jakichkolwiek innych danych przekazuje komunikat jako nieprawidłowe dane wejściowe.
jak pisać przypadki testowe regresji
Wniosek
Regex jest używany w wyszukiwarkach do wyszukiwania wzorców, wyszukiwania i zamiany okien dialogowych aplikacji, takich jak edytory tekstu i edytory tekstu. Regex jest również używany w narzędziach UNIX, takich jak sed, awk, a także w analizie leksykalnej programu.
W tym samouczku widzieliśmy funkcje używane do dopasowywania, wyszukiwania i zastępowania wzorców. Korzystając z tych funkcji, możemy w zasadzie stworzyć wydajną aplikację, która implementuje pożądaną funkcjonalność przy użyciu wyrażenia regularnego.
Regex umożliwia wydajne sprawdzanie poprawności danych wejściowych lub wyszukiwania i zastępowanie ciągu znaków przez poprawianie wzorca, a można to zrobić za pomocą kilku wierszy kodu C ++.
Przeczytaj także => Samouczek dotyczący wyrażeń regularnych Java
=> Sprawdź WSZYSTKIE samouczki C ++ tutaj.
rekomendowane lektury
- Wyrażenie regularne $ regex MongoDB z przykładem
- Python DateTime Tutorial z przykładami
- Jak używać wyrażeń regularnych Unixa
- Samouczek dotyczący długości tablicy w języku Java z przykładami kodu
- Samouczek dotyczący skryptów powłoki Unix z przykładami
- Samouczek dotyczący fragmentacji bazy danych MongoDB z przykładem
- Selenium Find Element By Text Samouczek z przykładami
- Samouczek potoków w systemie Unix: Potoki w programowaniu w systemie Unix