Co można / należy zrobić za pomocą wyrażeń regularnych? [Zamknięte]

13

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).

Kliknij opcję Upvote
źródło
6
Wymagany cytat: niektórzy ludzie, mając do czynienia z problemem, myślą: „Wiem, użyję wyrażeń regularnych”. Teraz mają dwa problemy. (ale w celu uzyskania kontekstu patrz codinghorror.com/blog/2008/06/ ...)
Steven A. Lowe
1
Jest tylko jedna rzecz, którą możesz zrobić z wyrażeniami regularnymi: rozpoznać słowa języków regularnych. To jest takie proste. Z tego powodu programiści muszą mieć pojęcie o klasach językowych i umieć rozpoznawać zwykłe języki.
Ingo
2
Zasadniczo nie chcesz używać wyrażeń regularnych, gdy chcesz użyć ifw nim wyrażenia .

Odpowiedzi:

4

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”.

Carson63000
źródło
15

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.

Karl Bielefeldt
źródło
4
+1, „kiedy przechodzi od dopasowania do parsowania” to świetny sposób na to.
Carson63000,
4

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.

Peter Rowell
źródło
C i Python nie są elementem nowoczesnego przetwarzania;)
Kliknij Upvote
1
+1 za bycie pierwszym linkiem do, no cóż, tej ... tej rzeczy .
Jon Purdy
1
@Click: W rzeczywistości są. Spróbuj zrobić coś w jądrze Linuksa bez solidnego uziemienia w C. A jeśli chodzi o Pythona ... IMNSHO, bazując na moim doświadczeniu z ponad 30 językami, bije bzdury z dowolnego języka na drugim miejscu.
Peter Rowell,
4

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.

Cervo
źródło
1
Nawiasem mówiąc, możesz użyć wyrażenia regularnego na HTML, jeśli nie musisz analizować całej rzeczy ... Np. Jeśli na stronie znajduje się tabela w określonym formacie, prawdopodobnie możesz użyć wyrażenia regularnego, aby przeanalizować to szybko. Ale jeśli chcesz zrozumieć dokument HTML, który można dowolnie zagnieżdżać ... zapomnij o tym. Np. Czy ten znacznik <head> jest w komentarzu, czy niepoprawnie w zakładce <td> w treści? Nie możesz powiedzieć ... Naprawdę, dla jednej lub dwóch warstw zagnieżdżenia możesz zrobić regex. Prawdziwym problemem jest dowolne zagnieżdżanie ... po prostu nie można tego wyrazić w ogólnym przypadku ...
Cervo
3

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:

^([07]|6[29]*3|(5|6[29]*[18])(4|5[29]*[18])*(6|5[29]*3)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3))|(3|6[29]*6|(5|6[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(5|4[29]*3|(3|4[29]*[18])(4|5[29]*[18])*(6|5[29]*3)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3)))|([29]|6[29]*5|(5|6[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|(3|6[29]*6|(5|6[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))(3|[07][29]*5|(6|[07][29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))*([18]|[07][29]*3|(6|[07][29]*[18])(4|5[29]*[18])*(6|5[29]*3)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(5|4[29]*3|(3|4[29]*[18])(4|5[29]*[18])*(6|5[29]*3)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3))))|([18]|6[29]*4|(5|6[29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4))|(3|6[29]*6|(5|6[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(6|4[29]*4|(3|4[29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4)))|([29]|6[29]*5|(5|6[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|(3|6[29]*6|(5|6[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(4|6[29]*[07]|(5|6[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))(3|[07][29]*5|(6|[07][29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))*([29]|[07][29]*4|(6|[07][29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(6|4[29]*4|(3|4[29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4)))))(5|3[29]*4|([29]|3[29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4))|([07]|3[29]*6|([29]|3[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(6|4[29]*4|(3|4[29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4)))|(6|3[29]*5|([29]|3[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|([07]|3[29]*6|([29]|3[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))(3|[07][29]*5|(6|[07][29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))*([29]|[07][29]*4|(6|[07][29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(6|4[29]*4|(3|4[29]*[18])(4|5[29]*[18])*([07]|5[29]*4)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(3|[18][29]*4|([07]|[18][29]*[18])(4|5[29]*[18])*([07]|5[29]*4)))))*(4|3[29]*3|([29]|3[29]*[18])(4|5[29]*[18])*(6|5[29]*3)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3))|([07]|3[29]*6|([29]|3[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(5|4[29]*3|(3|4[29]*[18])(4|5[29]*[18])*(6|5[29]*3)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3)))|(6|3[29]*5|([29]|3[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|([07]|3[29]*6|([29]|3[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([18]|3[29]*[07]|([29]|3[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))(3|[07][29]*5|(6|[07][29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*([07]|4[29]*5|(3|4[29]*[18])(4|5[29]*[18])*([18]|5[29]*5)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(4|[18][29]*5|([07]|[18][29]*[18])(4|5[29]*[18])*([18]|5[29]*5))))*([18]|[07][29]*3|(6|[07][29]*[18])(4|5[29]*[18])*(6|5[29]*3)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3))|(4|[07][29]*6|(6|[07][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|(5|[07][29]*[07]|(6|[07][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))([18]|4[29]*6|(3|4[29]*[18])(4|5[29]*[18])*([29]|5[29]*6)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*(5|[18][29]*6|([07]|[18][29]*[18])(4|5[29]*[18])*([29]|5[29]*6)))*(5|4[29]*3|(3|4[29]*[18])(4|5[29]*[18])*(6|5[29]*3)|([29]|4[29]*[07]|(3|4[29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))(6|[18][29]*[07]|([07]|[18][29]*[18])(4|5[29]*[18])*(3|5[29]*[07]))*([29]|[18][29]*3|([07]|[18][29]*[18])(4|5[29]*[18])*(6|5[29]*3))))))*$

który odpowiada liczbom dziesiętnym podzielnym przez 7 (i tylko te; źródło ).

F'x
źródło
4
Czy masz wyrażenie regularne do przetworzenia tego wyrażenia regularnego? Ponieważ nie jestem w stanie tego zrobić.
svick,
1
@svick Arbitralne wyrażenia regularne nie mogą być analizowane przez wyrażenia regularne. Ale sądzę, że już to wiesz.
Justsalt,
2

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.

ennuikiller
źródło
1
Obsługa wyrażeń regularnych Java nie jest taka zła. Prawdopodobnie nie jest tak dobry jak w Perlu, ale jest w porządku 99,99% czasu.
Ingo