나는 프로그래밍에 익숙하지 않으며, 인터뷰에서 정규 표현식에 대한 질문을 받았습니다. 말할 수 없다고 말할 필요도 없습니다. 정규식을 배워야하는지 궁금합니다. 모든 분야의 모든 프로그래머에게 필수품입니까? 아니면 특정 분야의 프로그래밍에 필수입니까?
관련 질문 :
나는 프로그래밍에 익숙하지 않으며, 인터뷰에서 정규 표현식에 대한 질문을 받았습니다. 말할 수 없다고 말할 필요도 없습니다. 정규식을 배워야하는지 궁금합니다. 모든 분야의 모든 프로그래머에게 필수품입니까? 아니면 특정 분야의 프로그래밍에 필수입니까?
관련 질문 :
답변:
정규 표현식은 매우 많은 언어에서 사용할 수있는 매우 편리한 도구로 대부분의 개발자가 조만간 배울 수 있습니다.
면접관에게는 면담 중에 경험을 조사 할 수있는 좋은 방법입니다. 이해하지 못하는 수년간의 경험을 주장하는 사람을 인터뷰하는 경우 더 자세히 조사해야합니다.
정규식은 도구입니다. 매우 유용한 도구이므로 많은 사람들이이 도구를 사용하는 방법을 배우기로 선택합니다. 그러나이 특정 도구를 사용하는 방법을 배우기위한 "요구 사항"은 없습니다. 다른 것을 배우기위한 "요구 사항"이 있습니다.
if (!(foo && bar))
=> if (!foo || !bar)
. 어쩌면 당신은 그것을 사용하고 깨닫지 못했거나 올바른 자료를 배우지 않았을 것입니다.
예를 들어 게임 프로그래머 나 LHC의 프로그래머가 정규 표현을 배운 적이 없다면 놀라지 않을 것입니다. 심지어 게임 프로그래머에게 SQL을 모르는 것에 대한 패스를 줄 수도 있습니다.
그러나 어떤 종류의 정보 시스템에서 일하고 있고 정규 표현식을 모르는 경우 스스로 장애를 겪고 있습니다.
반대로, 표준 IS 프로그래머가 게임 프로그래머가 할 수있는 행렬 수학을 알 것으로는 기대하지 않습니다. 프로그래머에는 뚜렷한 분야가 있지만 우리는 반드시 "정보 시스템"에 속해야합니다.
정규 표현식은 텍스트에서 패턴을 일치시키는 방법을 표현하는 매우 간결한 방법입니다.
텍스트에서 데이터를 구문 분석 및 추출하거나 일부 텍스트가 특정 패턴과 일치하는지 확인해야하는 요구 사항은 프로그래밍에서 매우 자주 발생하므로 이에 대해 배우고 이해하는 것이 중요합니다.
그들은 당신의 도구 상자에있는 좋은 도구이며 숙련 된 프로그래머가 사용법을 알기를 기대합니다.
정규식에 대해 배울 수있는 가장 좋은 자료 중 하나는 Jeffery Friedl의 책인 Mastering Regular Expressions 입니다. 다소 고급이므로 경험이 많을 때 실제로 읽을 수도 있습니다.
regular-expressions.info 에서 자습서 를 시작할 수 있습니다 .
여기에있는 대부분의 답변과 달리 정규 표현식에 대한 지식이 생산적인 프로그래머가되는 데 필요한 기술이라고 생각하지 않습니다. 후보자들과의 위치를 인터뷰 할 때 정규 능력을 스스로 발휘해야한다는 생각이 든다면 더 깊이 파고들 것입니다. 왜? 그들은 올바른 망치를 좋아하기 때문에 종종 장소에서 사용되지만 종종 필요한 것은 스크류 드라이버였습니다. HTML과 정규 표현식을 검색하면 정규 표현식이 적합하지 않은 몇 가지 질문과 몇 가지 이유가 있습니다.
인터뷰 대상자를 고용하기 위해 옹호하기 전에 적절한 OOD를 수행 할 수있는 능력이 필요합니다. 그리고 실제로 당신이 정규식을 알고 있지만 사용 된 프레임 워크에 대한 분석, 디자인 및 지식과 같은 영역이 부족한보다 생산적인 프로그래머가 될 수 있다고 생각하는 사람은 없다고 생각합니다.
물론 그들은 편리하지만 전문 개발자로서 20 년 이상 동안 코드에서 20 번 미만을 사용했다고 생각합니다 (그리고 심지어 몇 개의 펄 스크립트를 코딩했습니다). 그래도 교체하십시오.
작업중인 도메인에 관계없이 정규식은 대부분의 프로그래밍 언어가 일반 텍스트로 작성되므로 알아두면 유용한 도구입니다. 따라서 정규식은 소스 코드를 조작하고 리팩터링하는 좋은 방법이며 많은 텍스트 편집기에 내장되어 있습니다. 정규 표현식이 훨씬 빠르고 정확하게 변경을 수행 할 때 수많은 프로그래머가 소스 파일을 반복적으로 변경하는 것을 보았습니다.
이것이 Pragmatic Programmer의 3 장에서 "프로그래밍의 기본 원재료"인 평문에 대해 이야기하고 있습니다.
Jeff Atwood는 정규 표현식에 대한 훌륭한 블로그를 작성했습니다 . 놀라운 인용문이 있습니다.
Some people, when confronted with a problem, think "I know, I'll use regular
expressions." Now they have two problems. [Jamie Zawinski]
체크 아웃하려는 스택 오버플 로 좋은 질문에 대한 훌륭한 답변 도 있습니다.
당신은 그것에 대해 확실히 알아야합니다. 정규식은 배우기 쉽지만 마스터하기는 어렵습니다. 사용을 시작하기 위해 모든 것을 배울 필요는 없습니다. 그것에 대해 현명하게 행동하십시오.
tl; dr
기술 사용시기를 올바르게 결정할 수 있도록 기술에 대해 알아야합니다.
다른 답변을 인용하려면 :
정규 표현식은 텍스트에서 패턴을 일치시키는 방법을 표현하는 매우 간결한 방법입니다.
따라서 이것이 업무의 중요한 부분이라면 개발중인 시스템을 설계하는 더 좋은 방법이있을 것입니다. 많은 텍스트가 해당 지역에 고유 한 도메인이 아닌 한 (예 : 생물 정보학).
저는 3 개의 다른 엔터프라이즈 시스템 (10 년 동안 3 개의 다른 회사)에서 근무했으며 5 회 미만으로 작성했으며 기본 전자 우편 검사기를 두 번 복사하여 붙여 넣는 작업이 포함됩니다.
훌륭한 프로그래머가되기 위해 작은 정규 표현식을 모두 알 필요는 없습니다. 특히 다른 구현 및 프로그래밍 언어에 따라 약간 씩 다르기 때문에 특히 좋습니다. 당신이 할 알아야 할 것은
어쨌든, 처음부터 배우는 데 너무 많은 노력이 들지 않아도 걱정할 필요가 없습니다. 가장 간단한 사업자 ( .
, *
, |
, ()
, 등)은 거의 보편적으로 존재하고 이동 긴 길을!
이미 언급했듯이 Regex는 매우 유용한 도구 IMHO 도구입니다.
이 예제를 고려하십시오.
//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
예를 들어이 1000000.00과 같은 숫자를 "1,000,000.00"으로 변환하는 한 줄만
다른 방법을 사용하면 훨씬 더 복잡합니다
정규식을 배우는 것이 좋습니다. 직장에서 프로그래머를 고용 할 때 정규 표현식을 모르는 후보자는 일반적으로 신속하게 폐기됩니다. 정규 표현식을 반드시 알아야하기 때문이 아니라 프로그래밍에 대한 이해 수준과 프로그래밍 중독 수준을 나타내는 훌륭한 지표이기 때문입니다.
실제 프로그래머는 정규 표현식을 알고 있습니다.
그러나 정규식이 서버 측과 클라이언트 측 모두에서 많이 접하게되는 웹 프로그래밍에 주로 관여하기 때문에 이것은 약간 편향적입니다. 식기 세척기에 내장 된 시스템의 조립 프로그래머라면 정규 표현식을 전혀 보지 못할 것입니다. 그러나 정규 표현식 (검색 및 바꾸기, 파일 검색, 여러 파일 검색 등)을 알면 대부분 개발 환경을 더 잘 사용할 수 있기 때문에 여전히 유용 할 것입니다.
또한, 알고 있으면 동료 프로그래머가 쉽게 알아볼 수 있습니다.
흠,이 문자열 목록을 쉼표로 구분하여 출력해야합니다. 분리 인수를 취하는 for 루프가 포함 된 함수를 작성하고 계속 함께 추가하십시오 ... 또는 기존의 'join'명령을 사용할 수 있습니다.
각 객체가 가지고있는 몇 가지 속성을 기반 으로이 복잡한 객체로 정렬해야합니다.이 기능을 수행하는 정렬 함수를 작성하는 방법을 상기 시키십시오. 오, 기다려,이 언어가 지원하는 기존 표준 정렬 함수를 사용할 수 있습니다. 사용자 정의 비교기를 작성하는 방법을 배워야하지만 너무 어렵지 않아야합니다. 내 정렬 기능을 유지하는 것보다 낫습니다.
나는 가상 메소드에 대한 아이디어에 약간 무서워하지만, 다른 유형의 항목에 대한 각 목록을 단일 목록으로 줄이는 데 도움이되어야합니다. 그런 다음 각 목록을 다른 방식으로 처리하는 비슷한 문장 6 개를 작성할 필요가 없습니다. 내가 그렇게하면 내 코드가 훨씬 간단하고 깨끗해지기 때문에 열심히 공부하고 그 것들을 배워야한다고 생각합니다.
이 텍스트 파일 에서이 모든 다른 노이즈 사이 에서이 단어와 값 쌍을 추출해야합니다 .50 줄 파서를 작성하여 문자를 하나씩 읽고 문자 중 하나가 내가 시작한 것처럼 보이는 경우 내가이 상태 변수를 설정하고 다르게 파싱하기 시작하는 등 ... 물론 내 경우는 분명히 그렇게 특별한 사람이 없었습니다. 코드를 작성하십시오. 그것은 내가 중고 서점에 읽지 않은 프로그래밍 서적을 가져 가야한다는 것을 상기시켜줍니다.
짧은 대답 : 아니요하지만 ... 지식은 힘입니다.
나는 웹 개발자이며 일반적으로 필요한 정규 표현식이 이미 작성되어 있다는 것을 알았습니다. 그러나 나는 복사 및 붙여 넣기에 문제가 있었고 그것이 무엇을하고 있는지 알지 못하여 복사하고 붙여 넣을 위험이 있습니다.
한 가지 예 : 복사하여 붙여 넣은 전자 메일 정규식은 전자 메일 주소 사양에서 허용되는 전자 메일에 기간이나 플러스를 허용하지 않았습니다. 실제로 많은 사람들이 actualemail+sitename@gmail.com과 함께 gmail을 사용하므로 스팸으로 선택하면 'sitename'을 쉽게 필터링 할 수 있습니다.
정규식? 흠 ... 때로는 그들을 아는 것이 유용하지만 대부분의 경우 항상 같은 것을 사용합니다. 나는 정규 표현식을 자주 사용했지만 나는 그것에 능숙하다고 말하지 않았다. 나는 그것을 전혀 좋아하지 않으며 정규 표현식보다 알아야 할 것이 더 중요하다고 생각합니다.
그러나 공식 또는 데이터의 유효성 검사에서 매우 유용합니다. 거의 모든 전문 양식이 정규식으로 검증되었다고 생각합니다. 그것을 사용하는 ASP.NET.
그러나 전혀 : 필요할 때 표현하고 저장하십시오. 당신은 그들을 두 번 이상 희망적으로 사용할 것입니다. 그러나 RegEx로 시간을 낭비하지 마십시오!
작업중인 지역 / 플랫폼에 따라 다릅니다.
데스크톱 응용 프로그램의 경우 정규식에 대해 전혀 몰라도 쿨한 삶을 살 수 있습니다. 그러나 Visual Studio에는 정규 표현식 검색 기능이 있지만 누구나 정기적으로 사용하는지 궁금합니다. 나는 생각하지 않습니다 (당신은 검색을 할 수 있기 때문에 정규 표현식을 먼저 수정해야합니다 :)).
웹 개발자는 정규 표현식을 배워야 할 것입니다. 필요한 코드 스 니펫을 온라인에서 쉽게 찾을 수 있지만 학습에 도움이되므로 쉽게 해결할 수 있습니다.
정규식이 필수 불가결 한 도구 인 문서, 소송, 법률 관련 항목이 있습니다. 당신은 그것을 알아야합니다. 당신이하지 않으면 단순히 직업을 얻지 못할 것입니다.
간단히 말해서 그것이 직업 설명의 일부가 아니라면 그것에 대해 귀찮게하지 마십시오. 배우고 싶다면 재미있게 배우십시오.
나는 이것에 대한 많은 답변을 이미 보았지만, 그것들은 모두 프로그래머의 툴박스에서 도구 로서 정규식을 아는 장점에 관한 것 같습니다 .
나는 정규 표현식을 컴퓨터의 작동 방식에 대한 이해를 넓히는 일종의 지식으로 생각하는 것을 훨씬 선호합니다. 누군가가 진정으로 정규 언어가 무엇인지 알고 세 가지 간단한 작업으로 언어를 표현할 수 있다면 단순한 문자열 유효성 검사 도구 이외의 것을 제공한다고 생각합니다.
그들은 일반적으로 모든 종류의 프로그래밍에 유용한 구문 분석을 더 잘 이해하고, 우리가 정기적으로 사용하는 도구 (컴파일러, 편집기, 브라우저 등)가 어떻게 작동하는지 더 잘 이해할 수있게됩니다.
정규 표현식 을 사용하면 얻을 수있는 실질적인 이점 은 물론 막대합니다. 당신이 그들과 함께 "프로그래밍"하지 않더라도-나는 항상 에디터에서 찾기 / 바꾸기를하는 정규 표현식을 사용하고 그들이 얼마나 더 생산적인지 측정합니다.
따라서 필요하지는 않지만 프로그래머가 알아야 할 첫 번째 도구 중 하나라고 생각합니다.
정규 표현식은 쓰기가 어렵고 쓰기가 어렵고 다른 기술에 비해 비쌀 수 있습니다. 표준 어휘 분석 및 파싱 기술은 작성하기 쉽고, 일반적이며, 적응성이 뛰어나서 정규 표현식을 사용할 이유가 없습니다.
그것을 보는 또 다른 방법은 렉서와 구문 분석이 정적으로 정의 된 패턴과 일치하지만 정규 표현식의 강점은 패턴을 동적으로 표현하는 방법을 제공한다는 것입니다. 텍스트 편집기와 검색 도구는 훌륭하지만 컴파일 타임에 원하는 모든 것을 알고 있으면 정규식은 필요한 것보다 훨씬 일반 성과 유연성을 제공합니다.
모든 텍스트 처리 문제에 대한 만병 통치약으로 정규식을 장려하는 것은 게으르고 공학적인 문제 일뿐만 아니라 전혀 사용하지 않아야하는 사람들의 사용을 강화합니다.
파이크는 물론 장소가 있음을 인정하고 IMHO는 정규 표현식은 매우 강력한 도구입니다. 그들. 그러나 실제 문제는 그것들이 반창고라는 것입니다. :)
정규식은 종종 작업에 적합한 도구이며 특히 많은 텍스트 처리를 수행하는 응용 프로그램에서 매우 유용합니다. 그러나 그것들을 외우는 것은 광기입니다. 특수 문자, 앵커, 문자 클래스, 패턴 수정 자, 메타 문자가 모두 포함 된 치트 시트가 벽에 고정되어 있습니다. 사용 방법을 배우고 치트 시트를 가져 오는 데 20 분이 소요됩니다. 다른 모든 것을 추적하십시오. 필요한 것은 정규 표현식을 필요할 때 작성하는 것입니다. 일반적으로 약 6 개월마다 작업에 사용하기에 가장 적합한 도구 인 문제가 발생하는 빈도입니다. Perl, Latex, Emacs 또는 다른 무거운 텍스트 처리 팀에 있지 않는 한.