정규 표현식에 익숙한 사람들은 ^가 "문자열의 시작"을 의미하고 $가 "문자열의 끝"을 의미한다는 것을 알 수 있음. 하지만 개인적으로는 이들을 "라인의 시작"과 "라인의 끝"으로 생각함. 대부분의 경우 텍스트를 한 줄씩 다루기 때문에 결과는 같지만, 이 연산자들을 생각할 때의 관점은 변하지 않음. 아마도 grep을 통해 정규 표현식을 처음 접하고 주로 "라인"으로 입력을 생각하기 때문일 것임.
POSIX 정규 표현식과 Python 정규 표현식은 다름. 일반적으로 사용하는 구현체의 정규 표현식 문서를 참조해야 하며, 문법은 보편적이지 않음.
POSIX 제9장에 따르면, 정규 표현식은 일반적으로 텍스트 처리와 관련이 있으며, 문자열의 끝을 나타내는 NUL로 끝나는 문자열에 대해 작동함. 일부 유틸리티는 처리를 줄 단위로 제한함. $는 문자열의 끝이나 줄의 끝에 해당할 수 있으며, 이는 유틸리티(또는 모드)에 따라 정의됨. 대부분의 일반적인 유틸리티(grep, sed, awk, Python 등)는 기본적으로 줄의 끝으로 처리함.
단일 보편적인 정규 표현식 문법은 없음. 사용하는 언어와 옵션을 알지 못하면 정규 표현식을 신뢰할 수 있게 읽거나 쓸 수 없음.
Robert Elder를 소개하는 완벽한 기회임. 그는 YouTube와 블로그 콘텐츠를 만들며 정규 표현식에 대한 시리즈를 가지고 있고, 다양한 도구들의 행동 차이에 대해 깊이 파고듬.
HN 사용자들이 관심을 가질 만한 많은 콘텐츠를 가지고 있음, 예를 들어 컨설팅의 현실과 고충 등.
정규 표현식은 Perl을 처음 배울 때 진정으로 내면화한 첫 번째 것 중 하나임. (Perl은 여전히 "Camel" 책 덕분에 마음속에 따뜻한 자리를 차지하고 있음)
오늘날 가장 중요한 정보는 구현체가 다르다는 것을 아는 것이며, 작업하는 것에 대한 참조 자료를 끌어오는 습관을 들임.
예를 들어, Emacs 정규 표현식은 "\w" 대신 "\s_-" (또는 참조 자료 없이 화면에 무언가)를 문자 클래스로 사용하지만, Emacs는 최고의 문서화와 발견 가능성을 가지고 있음.
일부 유틸리티는 괄호 이스케이핑을 요구하고 일부는 그렇지 않음. 때로는 이러한 동작이 구성 가능하고 때로는 그렇지 않음.
혼란, 짜증, 부정의 단계를 모두 겪었으며 이제는 그저 받아들임. 개념은 어디에서나 동일하지만 풍미는 변함.
나쁜 채용 관리자들이 '정규 표현식에서 문자열의 끝을 어떻게 매치하는가?'를 그들의 '하! 넌 속임수를 모르는구나!' 질문 목록에 추가하는 것을 들을 수 있음.
정규 표현식과 관련하여 Perl을 목록에서 빼놓는 것은 이상함.
perlre 문서에서 $에 대한 설명: 문자열의 끝에 매치함 (또는 문자열 끝의 개행 문자 전에; 또는 /m을 사용할 경우 모든 개행 문자 전에)
Raku(이전의 Perl 6)는 문자열의 시작과 끝을 나타내기 위해 ^와 $를 선택하고, 줄의 시작과 끝을 나타내기 위해 ^^와 $$를 도입함. 다중 줄 모드는 사용 가능하지 않거나 필요하지 않음.
완전한 재고/재작성의 이점 중 하나는, 이전 동작이 사람들을 놀라게 했다는 사실에서 배울 수 있다는 것임.
정규 표현식이 표준화되었다고 생각하는 사람이 있음? 새로운 맥락으로 이동하는 것은 항상 다시 배우는 과정임.
문자열과 줄에 대한 혼란이 있음. 문자열은 문자의 연속이고, 줄은 두 가지 다른 것일 수 있음. 개행 문자를 줄 종결자로 간주하면, 줄은 개행 문자를 포함한 비개행 문자의 연속임. 개행 문자가 없으면 완전한 줄이 아님. POSIX가 사용하는 것임. 개행 문자를 줄 구분자로 간주하면, 줄은 비개행 문자의 연속임. 어느 경우든 줄의 내용은 개행 문자 전에 끝남, 개행 문자가 줄을 종결시키기 때문이거나 다음 줄과 구분하기 때문임.
^와 $의 의미는 줄에 기반을 둠 - 단일 줄 또는 다중 줄 모드 여부에 관계없이. 문자열 기반 의미 - 파일을 다룰 때 전체 파일로 생각할 수도 있음 - 에서는 \A와 \Z 또는 그에 상응하는 것을 사용함.
Hacker News 의견