Główna » jak » Jak korzystać z podstawowych wyrażeń regularnych, aby wyszukiwać lepiej i oszczędzać czas

    Jak korzystać z podstawowych wyrażeń regularnych, aby wyszukiwać lepiej i oszczędzać czas

    Bez względu na to, czy szukałeś z Grepem, czy też korzystasz z programów, które mogą grupować pliki według nazw, prawdopodobnie zastanawiałeś się, czy istnieje łatwiejszy sposób na wykonanie swojej pracy. Na szczęście jest i nazywa się "wyrażeń regularnych".

    (Komiks z XKCD.com)

    Czym są wyrażenia regularne?

    Wyrażenia regularne to sformułowania sformułowane w bardzo specyficzny sposób i mogące przynieść wiele różnych rezultatów. Znane również jako "regex" lub "regexp", są używane przede wszystkim w funkcjach wyszukiwania i nazywania plików. Jeden regex może być użyty jak formuła, aby utworzyć wiele różnych możliwych wyników, z których wszystkie są wyszukiwane. Możesz również określić, jak grupa plików powinna być nazwana, podając wyrażenie, a twoje oprogramowanie może stopniowo przejść do następnego zamierzonego wyjścia. W ten sposób możesz łatwo i skutecznie zmieniać nazwy wielu plików w wielu folderach i możesz wyjść poza ograniczenia prostego systemu numerowania..

    Ponieważ użycie wyrażeń regularnych opiera się na specjalnej składni, Twój program musi być w stanie odczytać i przeanalizować je. Wiele programów do zmiany nazw plików dla systemów Windows i OS X obsługuje obsługę wyrażeń regularnych, a także wieloplatformowe narzędzie do wyszukiwania GREP (które wymieniliśmy w naszym przewodniku Bash Scripting for Beginners Guide) oraz narzędzie wiersza poleceń Awk dla * Nix. Ponadto wiele alternatywnych menedżerów plików, programów uruchamiających i narzędzi do wyszukiwania korzysta z nich i mają one bardzo ważne miejsce w językach programowania takich jak Perl i Ruby. Inne środowiska programistyczne, takie jak .NET, Java i Python, a także nadchodzące C ++ 11, zapewniają standardowe biblioteki do korzystania z wyrażeń regularnych. Jak możesz sobie wyobrazić, mogą być naprawdę przydatne, gdy próbujesz zminimalizować ilość kodu umieszczanego w programie.

    Uwaga na temat uciekających postaci

    Zanim pokażemy Ci przykłady, chcielibyśmy wskazać coś. Zamierzamy użyć powłoki bash i polecenia grep, aby pokazać, jak stosować wyrażenia regularne. Problem polega na tym, że czasami chcemy używać znaków specjalnych, które muszą zostać przekazane do grep, a powłoka bash zinterpretuje ten znak, ponieważ powłoka również go używa. W tych okolicznościach musimy "uciec" od tych postaci. Może to być mylące, ponieważ to "ucieczkę" znaków występuje również w regexpach. Na przykład, jeśli chcemy wprowadzić to w grep:

    \<

    musimy zastąpić to:

    \\\<

    Każda postać specjalna otrzymuje jeden ukośnik odwrotny. Możesz też użyć pojedynczych cudzysłowów:

    "\<'

    Pojedyncze cytaty mówią bashowi NOT, aby nie interpretował tego, co w nich jest. Chociaż wymagamy podjęcia tych kroków, abyśmy mogli wykazać, że Twoje programy (w szczególności oparte na GUI) często nie wymagają tych dodatkowych kroków. Aby zachować prostotę i prostotę, rzeczywiste wyrażenie regularne zostanie ci podane jako cytowany tekst, a zobaczysz zignorowaną składnię na zrzutach ekranu wiersza poleceń.

    Jak się rozwijają?

    Regeksy to naprawdę zwięzły sposób określania terminów, dzięki czemu komputer może rozwinąć je w wiele opcji. Rzućmy okiem na następujący przykład:

    tom [0123456789]

    Kwadratowe nawiasy - [i] - powiedz procesorowi, że cokolwiek jest w środku, każda JEDNEGO znaku może być użyta do dopasowania. Cokolwiek znajduje się w tych nawiasach, nazywa się zestawem znaków.

    Tak więc, gdybyśmy mieli ogromną listę wpisów i użyliśmy tego wyrażenia regularnego do wyszukania, dopasowalibyśmy następujące terminy:

    • Tomek
    • tom0
    • tom1
    • tom2
    • tom3

    i tak dalej. Jednak poniższa lista NIE byłaby dopasowana, więc NIE pojawiłaby się w wynikach:

    • pomidor ; regex nie uwzględnia żadnych liter po "tom"
    • Tomek ; w wyrażeniu regularnym rozróżniana jest wielkość liter!

    Możesz również wybrać opcję wyszukiwania z kropką (.), Która pozwoli na obecność dowolnego znaku, o ile obecny jest znak.

    Jak widać, siadając z

    .Tomek

    nie przywołał terminów, które na początku miały tylko "tom". Pojawiły się nawet "zielone pomidory", ponieważ przestrzeń przed "tomem" liczy się jako postać, ale określenia takie jak "tomF" nie miały początkowej postaci i dlatego zostały zignorowane.

    Uwaga: domyślnym zachowaniem Grepa jest zwrócenie całego wiersza tekstu, gdy jakaś część pasuje do Twojego wyrażenia regularnego. Inne programy mogą tego nie robić i możesz wyłączyć to w grep z flagą "-o".

    Możesz również określić naprzemienność za pomocą potoku (|), jak tutaj:

    speciali (s | z) e

    Znajdziesz zarówno:

    • specjalizować
    • specjalizować

    Korzystając z polecenia grep, musimy uciec od znaków specjalnych (, |, i) za pomocą ukośników odwrotnych, a także użyć flagi "-E", aby to zadziałało i uniknąć brzydkich błędów.

    Jak wspomniano powyżej, jest tak dlatego, że musimy powiedzieć powłoce Bash, aby przekazać te znaki do grep i nie robić nic z nimi. Flaga "-E" mówi grep, aby używał nawiasów i potoku jako znaków specjalnych.

    Możesz wyszukiwać według wykluczenia za pomocą karetki, która znajduje się zarówno w nawiasach kwadratowych, jak i na początku zestawu:

    tom [^ F | 0-9]

    Ponownie, jeśli używasz grep i bash, pamiętaj, aby uciec z tej fajki!

    Warunki, które były na liście, ale NIE pojawiały się to:

    • tom0
    • tom5
    • tom9
    • tomF

    Te nie pasowały do ​​naszego wyrażenia regularnego.

    Jak mogę wykorzystać środowiska?

    Często szukamy w oparciu o granice. Czasami chcemy tylko ciągów, które pojawiają się na początku słowa, na końcu słowa lub na końcu linii kodu. Można to łatwo zrobić za pomocą tego, co nazywamy kotwicami.

    Korzystanie z karetki (poza nawiasami) pozwala wyznaczyć "początek" linii.

    ^ tom

    Aby wyszukać koniec linii, użyj znaku dolara.

    tom $

    Widać, że nasz łańcuch wyszukiwania pojawia się PRZED kotwicą w tym przypadku.

    Możesz także dopasowywać, które pojawiają się na początku lub na końcu słów, a nie całe linie.

    \

    tom \>

    Jak wspomnieliśmy w notatce na początku tego artykułu, musimy uciec z tych znaków specjalnych, ponieważ używamy basha. Możesz też użyć pojedynczych cudzysłowów:

    Wyniki są takie same. Upewnij się, że używasz pojedynczych cudzysłowów, a nie podwójnych cudzysłowów.

    Inne zasoby dla zaawansowanych regeksów

    Dotarliśmy tutaj tylko do wierzchołka góry lodowej. Możesz również wyszukiwać terminy pieniężne określone przez znacznik waluty i wyszukiwać dowolne z trzech lub więcej pasujących haseł. Rzeczy mogą się bardzo skomplikować. Jeśli chcesz dowiedzieć się więcej o wyrażeń regularnych, zapoznaj się z następującymi źródłami.

    • Zytrax.com ma kilka stron ze specyficznymi przykładami, dlaczego rzeczy się nie zgadzają.
    • Regular-Expressions.info ma również przewodnik dla wielu bardziej zaawansowanych rzeczy, a także poręczną stronę referencyjną.
    • Gnu.org ma stronę poświęconą użyciu wyrażeń regularnych z grep.

    Możesz także budować i testować swoje wyrażenia regularne za pomocą bezpłatnego narzędzia online o nazwie RegExr opartego na technologii Flash. Działa jak piszesz, jest bezpłatny i może być używany w większości przeglądarek.


    Czy korzystasz z ulubionych wyrażeń regularnych? Znasz świetny renaser wsadowy, który je wykorzystuje? Może po prostu chcesz się pochwalić swoim grep-fu. Przekaż swoje myśli, komentując!