29Jun

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

click fraud protection

Bez względu na to, czy szukałeś z Grepem, czy szukałeś programów, które mogą grupować pliki z nazwami, 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 instrukcje sformułowane w bardzo specyficzny sposób i mogące przynieść wiele różnych wynikó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 wyjść, z których wszystkie są wyszukiwane. Alternatywnie możesz określić, jak grupa plików powinna być nazwana, podając wyrażenie regularne, 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 w systemie 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ć bardzo przydatne, gdy próbujesz zminimalizować ilość kodu umieszczanego w programie.

instagram viewer

Uwaga na temat ucieczki 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ż "ucieczka" znaków występuje również w regexpach. Na przykład, jeśli chcemy wprowadzić to w grep:

\ &;

musimy zastąpić to:

\\\ & lt;

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

"\"

Pojedyncze cytaty informują bash NIE, aby interpretował to, co w nich jest. Chociaż wymagamy podjęcia tych kroków, abyśmy mogli Ci to pokazać, twoje programy( zwłaszcza 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ę ze zrzutów 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]

Nawiasy kwadratowe - [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 przeszukania, dopasowalibyśmy następujące terminy:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

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

  • pomidor;regex nie uwzględnia żadnych liter po "tom"
  • Tom;w regex jest rozróżniana 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ć, grepping z

. tom

nie wywoływał haseł, które miały tylko "tom" na początku. 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 to wyłączyć w grep z flagą "-o".

Możesz także określić naprzemienność za pomocą potoku( |), jak tutaj:

speciali( s | z) e

Znajdzie się zarówno:

  • specjalizuje się
  • specjalizuje

Podczas korzystania z polecenia grep, musimy uciec od znaków specjalnych( ,|, and) z ukośnikami odwrotnymi, 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]

Znowu, jeśli używasz grep i bash, pamiętaj, aby uciecta rura!

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

  • tom0
  • tom5
  • tom9
  • tomF

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

Jak używać środowisk?

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ć wyświetlane na początku lub końcu słów, a nie całe linie.

\ & lt; tom

tom \ & gt;

Jak wspomnieliśmy w notatce na początku tego artykułu, musimy uciec z tych znaków specjalnych, ponieważ używamy basha. Alternatywnie możesz również użyć 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 wyścigów

Uderzyliśmy tylko w wierzchołek góry lodowej. Możesz także 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 na temat wyrażeń regularnych, zapoznaj się z następującymi źródłami.

  • Zytrax.com ma kilka stron z konkretnymi 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, korzystając z darmowego narzędzia online o nazwie Flash, RegExr. Działa tak, jak piszesz, jest bezpłatny i może być używany w większości przeglądarek.

Czy masz ulubione użycie do 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!