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:
regular-expressions
użytkowników
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło
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.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”.
źródło
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 .
źródło
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.
źródło
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”.
źródło
Jeff Atwood napisał świetny blog o wyrażeniach regularnych, w którym znajduje się niesamowity cytat:
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ć.
źródło
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.
źródło
zacytować inną odpowiedź:
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.
źródło
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!
źródło
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ć
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ę!źródło
Jak już wspomniano Regex to narzędzie , bardzo przydatne narzędzie IMHO.
Rozważ ten przykład:
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
źródło
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.
źródło
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.
źródło
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ć.
źródło
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.
źródło
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.
źródło
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!
źródło
To zależy od obszaru / platformy, na której pracujesz
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ć :)).
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.
źródło
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ć.
źródło
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.
źródło
Rob Pike tak nie uważa :
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. :)
źródło
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.
źródło