Czy każdy programista musi nauczyć się wyrażeń regularnych? [Zamknięte]

82

Jestem nowy w programowaniu i podczas wywiadu otrzymałem pytanie dotyczące wyrażeń regularnych; nie trzeba dodawać, że nie mogłem odpowiedzieć. Zastanawiałem się więc, czy powinienem nauczyć się wyrażeń regularnych? Czy jest to konieczne dla każdego programisty wszystkich dziedzin? Czy jest to konieczne do programowania dla niektórych konkretnych dziedzin?

Powiązane pytania:

użytkowników
źródło
55
Wiem osobiście, czym one są, kiedy ich używać i jak składni Google. wzrusza ramionami
Tyanna
35
Jest koniecznością dla wszystkich zaawansowanych użytkowników. Programiści muszą być zaawansowanymi użytkownikami, aby być produktywnym.
SK-logika
8
Dlaczego nie chcesz się ich uczyć? Spotkałeś już co najmniej jedną sytuację, w której skorzystałbyś na ich poznaniu. Czy nie oznacza to, że możesz znaleźć się w podobnej sytuacji w przyszłości?
FishBasketGordo
23
Tylko te, które działają z tekstem :)
Steve Jackson

Odpowiedzi:

113

Wyrażenia regularne są tak niezwykle wygodnym narzędziem, dostępnym w tak wielu językach, że większość programistów nauczy się ich prędzej czy później.

Dla ankietera są dobrym sposobem na sprawdzenie doświadczenia podczas rozmowy. Jeśli przeprowadzasz wywiad z kimś, kto twierdzi, że ma wieloletnie doświadczenie, ale go nie rozumie, musisz kopać dalej.

ptyx
źródło
4
Zgadzam się, to dobre pytanie dla każdego doświadczonego programisty. Ale zapytanie świeżego absolwenta bez doświadczenia zawodowego na ich temat jest prawdopodobnie nieco niesprawiedliwe - chyba że naprawdę chcieli odfiltrować kandydatów bez praktycznego doświadczenia w programowaniu.
SK-logika
2
@ SK-logic: Zależy od szkoły. Wszyscy mieliśmy obowiązkowy kurs na drugim roku, w którym dość intensywnie korzystaliśmy z wyrażeń regularnych (przyznaję, że to właśnie ich uzależniłem;)). I wróciło do nich więcej niż kilka kursów dla seniorów, choć nigdy nie tak intensywnie.
FrustratedWithFormsDesigner
Zgadzam się z powyższymi komentarzami - nie spodziewałbym się, że ktoś po szkole niekoniecznie zna wyrażenia regularne. Ale wciąż mogę zapytać.
ptyx
13
Jestem matematykiem, więc nie mam formalnego doświadczenia w informatyce, ale pomyślałbym, że wyrażenia regularne były nauczane na kursach uniwersyteckich, dyskutując z gramatykami, parserami, automatami i tym podobne. Tak naprawdę spodziewałem się, że ktoś świeżo po studiach będzie miał lepszą wiedzę niż doświadczony programista bez studiów CS. : - /
Andrea
8
@Andrea, kiedy studiowałem na uniwersytecie (BS w dziedzinie informatyki), wyrażenia regularne były rzeczywiście uwzględnione podczas nauki gramatyki i automatów. Uwzględniono jednak tylko formalną koncepcję, a nie wnioski. Nie nauczyliśmy się składni wyrażeń regularnych zgodnych z POSIX ani Perl, ani też jak ich używać w naszym kodowaniu. Nauczyliśmy się rysować diagram stanu automatu skończonego, pisać to jako wyrażenie regularne itp. W grę wchodziły litery greckie, a nie pliki grep i tekstowe.
Adam Jaskiewicz
54

Wyrażenia regularne są narzędziem. Zdarza się, że jest to bardzo przydatne narzędzie, dlatego wiele osób decyduje się nauczyć z niego korzystać. Jednak nie ma „wymogu”, aby nauczyć się korzystać z tego konkretnego narzędzia, podobnie jak „wymóg”, aby nauczyć się czegokolwiek innego.

eykanal
źródło
19
Jest to tak samo prawdziwe, jak stwierdzenie, że zrozumienie logiki logicznej jest przydatne, ale nie wymagane.
Oded
1
@Oded: Nie znalazłem żadnego zastosowania logiki logicznej nauczanej na moim kursie.
DeadMG
16
@DeadMG, ciągle używam logiki boolowskiej, na przykład w konwersjach: if (!(foo && bar))=> if (!foo || !bar). Może używasz go i nie zdajesz sobie sprawy, a może nie nauczyłeś się właściwego materiału.
zzzzBov
7
Jak kontrola wersji? Czy testowanie oprogramowania?
Konrad Rudolph
2
@ruakh - Zgadzam się, że są niezwykle przydatne; Używam ich cały czas. Myślę, że wszyscy programiści powinni nauczyć się korzystać z wyrażeń regularnych w pewnym momencie swojej kariery. Pytanie jednak tego nie zadało.
eykanal
33

Nie zdziwiłbym się, gdyby na przykład programista gier lub programista w LHC nigdy nie nauczył się wyrażeń regularnych. Mógłbym nawet dać programistom gry odpowiedź, że nie zna SQL.

Ale jeśli pracujesz w jakimkolwiek systemie informatycznym i nie znasz wyrażeń regularnych, robisz sobie krzywdę.

Z drugiej strony, nie spodziewałbym się, że twój standardowy programista IS będzie znał matematykę matematyczną, którą zna programista gier. Istnieją odrębne dyscypliny programistyczne, jednak my musimy wpaść pod parasol „systemów informatycznych”.

Jonathan Rich
źródło
1
Programiści w LHC mogą używać wyrażeń regularnych do przeszukiwania plików danych wytwarzanych przez czujniki. Programiści gier mogą używać wyrażeń regularnych do przeszukiwania plików dziennika tworzonych przez ich gry. Ok, może nie muszą , ale prawdopodobnie może to znacznie ułatwić takie zadania.
FrustratedWithFormsDesigner
1
Zgadzam się, ale gdybym udzielał wywiadu na stanowisko programisty gier, nadal zatrudniłbym kogoś, gdyby nie wiedział, co to jest wyrażenie regularne. Gdybym zatrudniał kogoś, kto pełniłby tradycyjną rolę programistyczną w biznesie, a który nie wiedział, jakie są wyrażenia regularne, prawdopodobnie nie zostałby zatrudniony.
Jonathan Rich
To chyba sprawiedliwe.
FrustratedWithFormsDesigner
7
Fizycy cząstek pracują głównie w środowisku podobnym do unixa, ale podobnie jak wszystko inne związane z komputerem w tej społeczności, większość umiejętności przekazywana jest poprzez tradycje ustne. Poziom zaawansowania wyrażeń regularnych jest różny. Ale nie przeszukujemy danych za pomocą wyrażeń regularnych: jest ich za dużo i nie ma formatów tekstowych. Przeszukujemy logi i bazy danych ad hoc oraz kod i częściowo ocenioną dokumentację, tak jak wszyscy inni.
dmckee,
1
@FrustratedWithFormsDesigner, nie zatrudniłbym progrmera gier, który nie znałby wyrażenia regularnego. Programowanie ze swej natury wymaga dużej ilości informacji, niezależnie od dziedziny . Nie ważne, co robisz - w każdej dyscyplinie masz kod źródłowy, edytory tekstu obsługujące wyrażenia regularne i pliki dziennika. Bez regex Państwo będzie znacznie mniej skuteczny w wykonywaniu pewnych zadań (nawet jeśli nie trzeba pisać pojedynczej linii regex w dostarczonej grze). Nie twierdzę, że regex jest konieczny dla programisty gier. Mówię tylko, że nie zatrudniłbym takiego, który o tym nie wiedział.
Ben Lee,
22

Wyrażenia regularne to bardzo zwięzły sposób wyrażenia sposobu dopasowania wzorców w tekście.

Wymóg parsowania i wyodrębniania danych z tekstu lub sprawdzania, czy niektóre teksty są zgodne z określonym wzorcem, pojawia się bardzo często w programowaniu, więc powiedziałbym, że tak, ważne jest, aby dowiedzieć się o nich i je zrozumieć.

Są dobrym narzędziem do posiadania w twoim zestawie narzędzi i oczekiwałbym, że każdy doświadczony programista będzie wiedział, jak z nich korzystać.

Jednym z najlepszych zasobów do nauki o wyrażeniach regularnych jest książka Jeffery Friedl, Mastering Regular Expressions . Jest raczej zaawansowany, więc możesz chcieć go przeczytać, jeśli masz więcej doświadczenia.

Możesz zacząć od samouczka na regular-expressions.info .

Oded
źródło
2
To jest dla mnie kwestia gustu. Nigdy tak naprawdę ich nie potrzebowałem. Wykorzystałem je w kilku projektach, więc wiem, jak działają, ale z łatwością mogłem sobie poradzić bez nich i widziałem, że były niewłaściwie wykorzystywane, niż czułem potrzebę. Aby uprościć wzór, równie dobrze możesz użyć manipulacji ciągiem, aby skomplikować i szybciej używać (e) BNF, przynajmniej jeśli mnie lubisz, przyzwyczaiłeś się do parserów
Rune FS
15

W przeciwieństwie do większości odpowiedzi tutaj nie sądzę, że znajomość reg exs jest wymaganą umiejętnością, aby być produktywnym programistą. Kiedy przeprowadzam rozmowy z kandydatami na stanowisko, kopałbym głębiej, gdyby czuli się zmuszeni do doskonalenia swoich umiejętności. Dlaczego? są często używane w miejscach, ponieważ lubią odpowiedni młotek, ale często to, czego potrzebujesz, to śrubokręt. Wyszukaj SO dla HTML i regex, a zobaczysz sporo pytań i kilka powodów, dla których regex jest nieodpowiedni.

Wymagana jest umiejętność prawidłowego OOD, zanim będę zalecał zatrudnienie osoby udzielającej wywiadu, że znajomość wyrażeń regularnych na pewno nie jest. I tak naprawdę nie sądzę, aby ktokolwiek wierzył, że możesz być bardziej produktywnym programistą znającym wyrażenia regularne, ale brakującym takich dziedzin, jak analiza, projektowanie i znajomość używanego frameworka

Jasne, że czasami są przydatne, ale przez ponad 20 lat jako profesjonalny programista, myślę, że użyłem ich mniej niż 20 razy w kodzie (a nawet napisałem kilka skryptów perla). Używam ich regularnie do wyszukiwania i wymienić jednak.

Rune FS
źródło
Programiści, którzy nie znają wyrażeń regularnych, często tworzą duży stos WTF, gdy wyrażenie regularne działałoby bardzo dobrze. Programiści, którzy znają WYŁĄCZNIE wyrażenia regularne, często tworzą mniejszy, ale masowo niepoprawny stos WTF, próbujący przetwarzać języki nieregularne (np. HTML) za pomocą wyrażeń regularnych.
kevin cline
14

Bez względu na domenę, w której pracujesz, wyrażenia regularne są przydatnym narzędziem do poznania, ponieważ większość języków programowania jest napisana jako zwykły tekst. Regex jest zatem świetnym sposobem na manipulowanie i refaktoryzowanie kodu źródłowego i jest wbudowany w wiele edytorów tekstu. Widziałem niezliczoną liczbę programistów, którzy powtarzali zmiany w plikach źródłowych, gdy wyrażenie regularne wprowadzałoby zmiany znacznie szybciej i dokładniej.

O tym mówi Rozdział 3 Pragmatic Programmer, w którym zwykły tekst jest „podstawowym surowcem programowania”.

JohnTESlade
źródło
Dlaczego nie użyjesz idei, która obsługuje refaktoryzację?
NimChimpsky
2
Gdybym zadał pytanie w tym poście, dałbym ci znacznik wyboru. To jest najważniejszy powód, dla którego nigdy nie zatrudniłbym kogoś, kto nie znałby wyrażenia regularnego. Jest to potężne narzędzie do edycji kodu i przeszukiwania dziennika , nawet jeśli nigdy nie musisz pisać ani jednego wiersza kodu, który go używa. Ktoś, kto nie wie, że będzie o rząd wielkości mniej wydajny w niektórych codziennych zadaniach.
Ben Lee,
10

Jeff Atwood napisał świetny blog o wyrażeniach regularnych, w którym znajduje się niesamowity cytat:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

Istnieje również świetna odpowiedź na dobre pytanie dotyczące przepełnienia stosu, które możesz chcieć sprawdzić.

Powinieneś zdecydowanie o tym trochę wiedzieć. Wyrażenia regularne są łatwe do nauczenia się, ale trudne do opanowania. Nie musisz się wszystkiego uczyć, aby z niego korzystać. Po prostu bądź rozsądny.

 

tl; dr

Musisz wiedzieć o technologii, abyś mógł podjąć właściwą decyzję, kiedy z niej skorzystać.

Makach
źródło
8

Pracuję w bazie kodu osadzonego, który nie ma dostępnej biblioteki wyrażeń regularnych. Pewne zadanie wymagało 275 wierszy kodu i zajęło około dwóch tygodni debugowanie wszystkich przypadków naraz, tam iz powrotem między testerem a programistą. Później napisałem funkcję, aby zrobić to samo jako część narzędzia javascript. Dokładna samo zadanie za pomocą wyrażeń regularnych używany 10 linii kodu i działało idealnie w około 15 minut.

Czy potrzebujesz wyrażeń regularnych? Technicznie nie, ale głupotą jest celowe pozostawanie ignorantem co do narzędzia, które jest skuteczne.

Karl Bielefeldt
źródło
6

zacytować inną odpowiedź:

Wyrażenia regularne to bardzo zwięzły sposób wyrażenia sposobu dopasowania wzorców w tekście.

Więc jeśli jest to ważna część pracy, prawdopodobnie istnieje lepszy sposób zaprojektowania systemu, który rozwijasz. Chyba że dużo tekstu jest specyficzne dla Twojej dziedziny (np. Bioinformatyka).

Pracowałem nad trzema różnymi systemami korporacyjnymi (w trzech różnych firmach w ciągu dziesięciu lat) i napisałem je mniej niż pięć razy, co obejmuje dwukrotne skopiowanie i wklejenie podstawowego sprawdzania poprawności wiadomości e-mail.

Nim Chimpsky
źródło
2
Dużo tekstu zawsze zależy od domeny. W końcu jesteś programistą . Tekst (w formie kodu źródłowego) to Twoja domena. Efektywne manipulowanie tekstem za pomocą wyrażeń regularnych sprawia, że ​​jesteś bardziej wydajnym programistą.
kwantowe
2
@ kwanticle, co nie ma sensu. Czy faktycznie manipulujesz kodem źródłowym za pomocą wyrażeń regularnych? To brzmi jak absolutny koszmar. Wyrażenia regularne są częścią Twojego kodu, a Twój kod współdziała z danymi specyficznymi dla domeny.
NimChimpsky
3
Manipuluję kodem źródłowym za pomocą wyrażeń regularnych. Ręczne refaktoryzowanie dużych fragmentów kodu jest uciążliwe i podatne na błędy. Korzystanie z edytora obsługującego wyszukiwanie i zamienianie wyrażeń regularnych (wskazówka: prawie każdy edytor obsługuje wyszukiwanie i zamiana wyrażeń regularnych) znacznie ułatwia refaktoryzację.
kwantowe
3
@Dunk nie twierdzi, że jest to duży wzrost wydajności w trakcie trwania projektu, ale raczej, że może to być duży wzrost w krótkim okresie czasu. Dokonałem również refaktoryzacji tam, gdzie były setki, a nawet tysiące zmian w dziesiątkach plików. Przez cały czas trwania projektu zaoszczędzone godziny są nieznaczne, ale z pewnością nie chciałem poświęcać godzin lub dni, aby ręcznie wprowadzić te same zmiany. Nowoczesne IDE mogą zrobić to dla ciebie bez pisania wyrażenia regularnego, ale czasami nie jest to możliwe (na przykład przerabianie wspólnego wzorca przypisywania).
jmoreno
2
@NimChimpsky Regexps działa wszędzie. IDE i narzędzia do refaktoryzacji działają tylko dla określonych języków. Na przykład, czy Twoje narzędzie do refaktoryzacji pozwoli mi przejrzeć wszystkie moje szablony i znaleźć / usunąć ciąg, który wygląda jak numer telefonu ( sites.google.com/site/steveyegge2/... )?
kwant
4

Wyrażenia regularne mogą być uważane za bardzo przydatne, wieloplatformowe, wieloplatformowe narzędzie do przetwarzania. Mogę używać wyrażeń regularnych w kodzie, mogę używać wyrażeń regularnych w moim edytorze, mogę używać wyrażeń regularnych w wierszu polecenia!

Nie chodzi tylko o to, że musisz ich nauczyć. To bardziej jak

ŁAŁ! UWIELBIAM REGEX!

Xeoncross
źródło
4

Nie musisz znać wszystkich małych dziwactw wyrażeń regularnych, aby być świetnym programistą, zwłaszcza że wszystkie one różnią się nieco w zależności od różnych implementacji i języków programowania. Musisz tylko wiedzieć

  • Co to są wyrażenia regularne i wyrażenia regularne.
  • Jakie rzeczy robią skutecznie (parsowanie zwykłych języków)
  • Jakie rzeczy są szczególnie przydatne (parsowanie zagnieżdżonych rzeczy, użycie mnóstwa odsyłaczy)
  • Gdzie uzyskać informacje na temat składni, gdy trzeba ją przeczytać lub napisać.

W każdym razie nie musisz się zbytnio martwić o to, że nauczenie się ich zajmie zbyt wiele wysiłku. Najprostsze operatorzy ( ., *, |, (), etc) są niemal powszechnie obecne i przejść długą drogę!

hugomg
źródło
Myślę, że to naprawdę dobry punkt. Umiejętność korzystania z referencji i innych zaawansowanych funkcji niektórych silników RE jest tylko umiarkowanie użyteczna. W wielu / większości przypadków połączenie użycia RE z odrobiną logiki jest bardziej czytelne i łatwiejsze w utrzymaniu.
Mark Bessey
3

Jak już wspomniano Regex to narzędzie , bardzo przydatne narzędzie IMHO.

Rozważ ten przykład:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Tylko jeden wiersz do konwersji na przykład liczby takiej jak 1000000,00 na „1 000 000,00”

Korzystanie z dowolnej innej metody będzie znacznie bardziej złożone

emont01
źródło
2
a to nie jest skomplikowane? wykorzystuje kilka specjalnych funkcji, których nie ma w standardowym zestawie wyrażeń regularnych. prosta długość i wypełnienie wystarczyłyby w tym przypadku
maniak zapadkowy
2

To nie jest konieczne. Musisz tylko zdawać sobie sprawę z ich istnienia i kiedy z nich korzystać. Specyfika składni jest łatwa do znalezienia i poprawnego za pomocą narzędzi Google i online.

Legowisko
źródło
2

Naprawdę radziłbym ci nauczyć się wyrażeń regularnych. W pracy, gdy zatrudniamy programistów, kandydaci, którzy nie znają wyrażenia regularnego, są zazwyczaj szybko usuwani. Nie dlatego, że absolutnie muszą znać wyrażenia regularne, ale dlatego, że jest to bardzo dobry wskaźnik ich poziomu zrozumienia programowania i poziomu uzależnienia od programowania.

Prawdziwy programista zna ich wyrażenia regularne

Jest to jednak trochę stronnicze, ponieważ głównie zajmuję się programowaniem internetowym, w którym wyrażenia regularne są czymś, z czym często można się spotkać, zarówno po stronie serwera, jak i po stronie klienta. Gdybyś był programistą asemblera dla wbudowanego systemu w zmywarce do naczyń, prawdopodobnie nie spotkałbyś wyrażeń regularnych. Ale nadal może się przydać, ponieważ w większości przypadków jesteś w stanie lepiej władać środowiskiem programistycznym, gdy znasz wyrażenia regularne (wyszukaj i zamień, wyszukaj plik, wyszukaj w wielu plikach itp.).

Ponadto łatwiej będzie ci poznać innych programistów, jeśli o tym wiesz.

Aron Cederholm
źródło
Poza tym nie ma sensu uczyć się na pamięć kompletnych specyfikacji na początku, ponieważ istnieje wiele różnych dialektów. Zamiast tego spróbuj skupić się na nauce podstaw: (1) przygotuj kilka prostych wyrażeń regularnych i naucz się znaczenia. * + {} [] () i - oraz kilka podstawowych klas. (2) mając podaną specyfikację, spróbuj zrozumieć, co się dzieje w wyrażeniach regularnych, na które natrafisz.
Aron Cederholm
Do czego używasz reg exps w swoim web dev. To jest to, co robię i użyłem 5 razy w ciągu 10 lat +.
NimChimpsky
Na początek: parsowanie lub sprawdzanie poprawności danych wprowadzanych przez użytkownika (np. E-mail, kod pocztowy / kod pocztowy, formularze wyszukiwania użytkownika). Ale także do celów I18n i 1010n dla niestandardowych i zmiennych ciągów tłumaczeń w wielu językach / lokalizacjach. I na pewno przyszli z pomocą w wykrywaniu błędów i całkiem sporej obsłudze błędów. I w świecie CMS / blogs / comments dla wiki / znaczników forum. W przypadku danych zewnętrznych (dane wejściowe użytkownika, zeskrobane strony, zsynchronizowane zasoby itp.) Parsowanie, obsługa i przepisywanie treści / linków / czegokolwiek. Plus do wszystkich celów statystycznych i rejestracji (wykrywanie przeglądarki, sortowanie
referencji
-1 za tak szalenie ignorancki komentarz „Prawdziwy programista ...”
Dunk
Jest to dość powierzchowny sposób sprawdzania poprawności danych wprowadzanych przez użytkowników i nie powinienem być zaskoczony, jeśli wyrażenia regularne były w 100% dokładne (sprawdzanie poprawności wiadomości e-mail jest znane). I nie używam tych „niestandardowych i zmiennych ciągów tłumaczeń w wielu językach / lokalizacjach”, które tłumaczysz między językami za pomocą wyrażeń regularnych - er wtf? Cele statystyk - robisz statystyki za pomocą wyrażeń regularnych? Przepisywanie linków / treści za pomocą wyrażeń regularnych brzmi dla mnie jak zapach kodu.
NimChimpsky
1

Czy to konieczne? Wiesz już, co MUSISZ wiedzieć: że istnieją, czym są i do czego są używane. Twoim zadaniem jako programisty jest rozwiązywanie problemów. Teraz wiesz wystarczająco dużo, aby rozpocząć ich faktoring w swoim rozwiązaniu problemu. Czy powinieneś nauczyć się wyrażeń regularnych? Absolutnie. Priorytet należy do ciebie ... są prace, w których będą używane codziennie, i prace, w których nigdy nie będą używane. Prostym przewodnikiem byłoby, ile wzoru będzie wymagało dopasowanie do problemów, których możesz się spodziewać.

jmoreno
źródło
1

Hmm, muszę oddzielić przecinkami i wypisać tę listę ciągów, pozwól mi napisać funkcję zawierającą pętlę for, która pobiera argument separatora, i dołączaj je razem ... lub mógłbym po prostu użyć istniejącej komendy 'join'.

Potrzebuję sortowania do tych złożonych obiektów w oparciu o kilka atrybutów, które każdy z nich ma, pozwólcie sobie przypomnieć, jak napisać funkcję sortującą, która to robi, och nie, czekam, mogę po prostu użyć istniejącej standardowej funkcji sortowania obsługiwanej przez ten język. Będę musiał nauczyć się pisać niestandardowy komparator, ale nie powinno to być zbyt trudne, to oczywiście lepsze niż utrzymywanie własnej funkcji sortowania.

Trochę boję się idei metod wirtualnych, ale powinno mi to pomóc zredukować te listy, każda dla innego rodzaju przedmiotu, do jednej listy. Nie muszę wtedy pisać pół tuzina podobnych instrukcji przetwarzających każdą listę w inny sposób. Chyba powinienem się uczyć i uczyć tych rzeczy, ponieważ mój kod będzie o wiele prostszy i czystszy, jeśli to zrobię.

Muszę wyodrębnić z tego pliku tekstowego te pary słów i wartości spośród całego tego innego szumu, pozwól mi napisać pięćdziesięcioliniowy parser, aby odczytać znaki jeden po drugim, a jeśli jeden z znaków wygląda jak początek tego, czym jestem szukam, ustawię tę zmienną stanu i zacznę ją analizować inaczej itd. itd. Oczywiście mój przypadek jest oczywiście tak wyjątkowy, że nikt inny nie spotkał się z takim problemem wcześniej i nie wymyślił ogólnego rozwiązania, które zajmuje jedną linię kodu, aby to zrobić. To przypomina mi, że powinienem zabrać książki o programowaniu, których nigdy nie czytałem, do używanej księgarni.

Benedykt
źródło
1

Krótka odpowiedź: Nie, ale .... wiedza to potęga.

Jestem programistą stron internetowych i znajduję już dla mnie wszelkie wyrażenia regularne, których ogólnie potrzebuję. Miałem jednak problemy z kopiowaniem i wklejaniem i nie zdawałem sobie sprawy z tego, co robił, czy nie, co stanowi niebezpieczeństwo kopiowania i wklejania WSZYSTKIEGO.

Jeden przykład: wyrażenie regularne, które skopiowałem i wkleiłem, nie pozwalało na kropkę lub plus w e-mailu, który jest dozwolony w specyfikacji adresu e-mail. W rzeczywistości wiele osób korzysta z Gmaila z rzeczywistą pocztą + [email protected], dzięki czemu filtrowanie „sitename” powinno być łatwe, jeśli zdecydują się na spam.

TheDPQ
źródło
0

wyrażenia regularne? Hmmm ... czasem warto je znać, ale większość czasu zawsze używasz tego samego. Używałem wyrażeń regularnych dość często, ale nie powiem, że jestem z tym dobry. W ogóle mi się to nie podoba i myślę, że są ważniejsze rzeczy niż regex.

Ale przy walidacji formuł lub danych jest to bardzo przydatne. Myślę, że prawie każda profesjonalna forma jest sprawdzana przy pomocy wyrażenia regularnego. ASP.NET go używa.

Ale w ogóle: spróbuj zrobić wyrażenie, gdy go potrzebujesz i zapisz je. Mam nadzieję, że użyjesz ich więcej niż raz. Ale nie trać czasu z RegEx!

Smokefoot
źródło
0

To zależy od obszaru / platformy, na której pracujesz

  1. W przypadku aplikacji komputerowej możesz żyć kool, nie wiedząc nic o wyrażeniach regularnych. Ale uwaga: Visual Studio ma wyszukiwanie wyrażeń regularnych, ale zastanawiam się, czy ktoś używa go regularnie. Myślę, że nie (najpierw musisz naprawić wyrażenie regularne, ponieważ możesz wyszukać :)).

  2. Jako programista najprawdopodobniej będziesz musiał nauczyć się wyrażeń regularnych. Możesz tego uniknąć, ponieważ możesz łatwo znaleźć fragment kodu online, który wystarczy, ale potrzebujesz pomocy w nauce.

Istnieją obszary takie jak dokumentacja, spory sądowe, sprawy prawne, w których wyrażenie regularne jest niezbędnym narzędziem. Musisz to wiedzieć. Jeśli nie, po prostu nie dostaniesz pracy.

Krótko mówiąc, jeśli nie jest to część opisu stanowiska, nie zawracaj sobie tym głowy. Jeśli chcesz się tego nauczyć, naucz się dla zabawy.

Noname
źródło
0

Wyrażenia regularne są bardzo przydatnym narzędziem i istnieje wiele sytuacji, w których programiści powinni ich używać. Nie powinieneś uczyć się ich wszystkich na pamięć. Skorzystaj z referencji i wykonaj swoje zadanie. Po 10-20-50-100 (w zależności od programisty) zadaniach, w których używałeś wyrażeń regularnych, poznasz je na pamięć. Uczą się sami, nie powinieneś się ich specjalnie uczyć.

Larry Cinnabar
źródło
0

Widzę już wiele odpowiedzi na to pytanie, ale wszystkie wydają się dotyczyć znajomości wyrażeń regularnych jako narzędzia w przyborniku programisty.

Wolę myśleć o wyrażeniach regularnych jako o wiedzy, która poszerza naszą wiedzę na temat działania komputerów. Kiedy ktoś naprawdę zrozumie, czym jest zwykły język i że możesz go wyrazić za pomocą trzech prostych operacji, wierzę, że daje mu to coś więcej niż zwykłe narzędzie do sprawdzania poprawności prostych ciągów.

Stają się w stanie lepiej zrozumieć parsowanie w ogóle, co jest przydatne w prawie każdym rodzaju programowania i lepiej zrozumieć, jak działają narzędzia, których używamy regularnie (kompilator, edytor, przeglądarka itp.).

Praktyczne korzyści z używania wyrażeń regularnych są oczywiście ogromne. Nawet jeśli nie „programujesz” z nimi - używam wyrażeń regularnych, znajdując / zamieniając w moim edytorze przez cały czas i mierzę, o ile bardziej produktywnie mnie zwiększają.

Chociaż nie jest to konieczne, myślę, że jest to jedno z pierwszych narzędzi, których powinien nauczyć się programista.

Avi
źródło
0

Rob Pike tak nie uważa :

Wyrażenia regularne są trudne do napisania, trudne do napisania i mogą być drogie w porównaniu z innymi technologiami. Standardowe techniki leksykalne i parsowania są tak łatwe do napisania, tak ogólne i tak elastyczne, że nie ma powodu, aby używać wyrażeń regularnych.

Innym sposobem spojrzenia na to jest to, że leksykon i parsowanie pasują do statycznie zdefiniowanych wzorców, ale siła wyrażeń regularnych polega na tym, że zapewniają sposób dynamicznego wyrażania wzorców. Doskonale sprawdzają się w edytorach tekstu i narzędziach wyszukiwania, ale kiedy wiesz, w czasie kompilacji, czego szukasz, wyrażenia regularne zapewniają znacznie większą ogólność i elastyczność niż potrzebujesz.

Zachęcanie do wyrażeń regularnych jako panaceum na wszystkie problemy związane z przetwarzaniem tekstu to nie tylko leniwa i słaba inżynieria, ale także wzmacnia ich użycie przez osoby, które w ogóle nie powinny ich używać.

Warto zauważyć, że Pike przyznaje, że ma swoje miejsce, a IMHO, wyrażenia regularne są dość potężnym narzędziem, które absolutnie nagradza czas, który spędziłem na nauce używania, i z tego punktu widzenia absolutnie polecam naukę im. Ale możliwe jest, że prawdziwym problemem jest to, że są one pomocą zespołu, która pozwoliła mi uciec od wiedzy o leksykach i parsowaniu mniej niż powinienem. :)

Weston C.
źródło
0

Powiem tylko, że wyrażenia regularne są często odpowiednim narzędziem do pracy i są bardzo przydatne, zwłaszcza w aplikacjach, które przetwarzają dużo tekstu. Zapamiętywanie ich to jednak szaleństwo. Mam przyklejoną na ścianie ściągawkę z wszystkimi znakami specjalnymi, kotwicami, klasami postaci, modyfikatorami wzorów, metaznakami ... Po prostu poświęć 20 minut na nauczenie się ich używania i zdobądź ściąg. śledzić wszystko inne. Wszystko, czego potrzebujesz, to możliwość napisania wyrażenia regularnego, gdy jest ono potrzebne, co zwykle występuje co 6 miesięcy - tak często, jak napotykasz problem, w którym są najlepszym narzędziem do pracy. Chyba że pracujesz w Perlu, Lateksie, Emacsie lub innym zespole zajmującym się przetwarzaniem tekstu.

Jonathan Henson
źródło