Niedawno nauczyłem się wyrażeń regularnych i uwielbiam je pisać / używać. Szukam pomysłów i większych możliwości ich wykorzystania, jednak nie chcę nadużywać ich jako uniwersalnego narzędzia, jak często ostrzegają ludzie.
Do jakich rzeczy powinienem używać wyrażeń regularnych i gdzie nie powinienem ich używać? (Oprócz oczywistych: parsowanie HTML).
self-improvement
regular-expressions
Kliknij opcję Upvote
źródło
źródło
if
w nim wyrażenia .Odpowiedzi:
Tam, gdzie świecą, masz definicję łańcucha, który jest dobrze zdefiniowany i prosty, dzięki czemu możesz (a) sprawdzić, czy fragment danych wejściowych pasuje do wzorca i (b) wyodrębnić z niego wszystkie części wzoru, w pojedynczej operacji wyrażenia regularnego.
Na przykład, innego dnia musiałem zająć się niektórymi kodami niż składał się z dwóch jednoliterowych identyfikatorów (jeden z nich miał trzy opcje, drugi mógł być dowolną alfą), daty, a następnie dwucyfrowej liczby, jak ta : MR_20110508_01
Jedno proste wyrażenie regularne z 4 nazwanymi grupami umożliwiło mi wykonanie pojedynczego połączenia, które sprawdziło, czy przychodzący kod jest prawidłowy, i dało mi 4 nazwane grupy, do których mogłem uzyskać dostęp, aby wyciągnąć 4 elementy.
Im bardziej dowolna treść może zawierać cel wyrażenia regularnego, lub im więcej reguł zależy od innych części treści, tym bardziej prawdopodobne jest, że zmierzasz do piekła Jamiego Zawińskiego „teraz masz dwa problemy”.
źródło
Większość zadań dopasowywania ciągów może korzystać z wyrażeń regularnych. Gdy przestaniesz nazywać go dopasowywaniem i zaczniesz nazywać go parsowaniem, wyrażenia regularne nie będą tak pomocne. Zwykle dzieje się tak, ponieważ ludzie nazywają to analizą składniową, gdy wiąże się to z zagnieżdżaniem lub inną rekurencją, której nie mogą obsłużyć wyrażenia regularne.
Prawdopodobnie miejsce, z którego najczęściej korzystam, gdzie niektórzy ludzie nie wiedzą, że są dostępne, znajduje się w moim edytorze podczas wyszukiwania czegoś. Nie wprowadzają go do mojego kodu tak często, jak pomagają w szybszym kodowaniu.
źródło
Moja odpowiedź jest przecząca: nie próbuj pisać parsera (na przykład HTML ) z wyrażeniami regularnymi. Możesz wyodrębnić z nimi wszelkiego rodzaju przydatne informacje, ale jest kilka rzeczy, których nie możesz zrobić. Rozważam rozumienie wyrażeń regularnych na równi z SQL, C i Pythonem - jest to jeden z elementów nowoczesnego przetwarzania.
źródło
Powiedziałbym, że jeden znak ostrzegawczy mówi, że wyrażenie regularne nie zadziała, gdy potrzebujesz czegoś, co można zagnieździć. Np. Język programowania (lub HTML / XML / itp.). Gdy zaczniesz zagnieżdżać, musisz zapisać stan i użyć automatu stanów.
Również jeśli spojrzysz na wyrażenie regularne dla wiadomości e-mail tutaj , zobaczysz, że Regexy mogą szybko stać się nieczytelne. Czasami nawet jeśli możesz użyć wyrażeń regularnych, użycie gramatyki sprawia, że wszystko jest bardziej zrozumiałe. Nawet przy prostszych wyrażeniach regularnych możesz szybko zacząć tworzyć coś, co jest trudne do odczytania / utrzymania.
Ponadto istnieje wiele zadań, które nie wymagają wyrażenia regularnego. Na przykład możesz podzielić ciąg pól oddzielonych przecinkami za pomocą wyrażenia regularnego, ale o wiele łatwiej jest powiedzieć string.split („,”). Ogólnie, wyrażenie regularne będzie wymagało wielu kroków / wyszukiwań, podczas gdy split wykona to w jednej instrukcji. Również w przypadku prostego wyszukiwania bardziej wydajne i przejrzyste będzie użycie wbudowanej procedury wyszukiwania.
źródło
Zauważyłem, że ukośnik pomiędzy puszką a powinien w swoim pytaniu nie podkreślają najważniejszą częścią niej: Różnica między tymi dwoma.
Są rzeczy, które można zrobić za pomocą wyrażeń regularnych, których nie należy robić z nimi. Jednym z przykładów jest użycie następującego wyrażenia regularnego:
który odpowiada liczbom dziesiętnym podzielnym przez 7 (i tylko te; źródło ).
źródło
Nie ma tutaj sztywnych i szybkich reguł, ale powiedziałbym, że każdy tekst posiadający zadanie, które nie ma dostępnej biblioteki, jest gotowy na regex. Zależy to również w dużym stopniu od obsługi wyrażeń regularnych w używanym języku. Perl ma szerokie wsparcie dla wyrażeń regularnych, podczas gdy java ma mniej. Dlatego można oczekiwać, że będziesz używać więcej wyrażeń regularnych w perlu niż w Javie.
źródło