개인적으로는 개발을 하면서 매일같이 정규표현식을 사용하고 있습니다.
주위 동료나 후배들에게도 배워둘 것을 권하고요.
가장 많이 사용하는 것을 역시 검색 혹은 치환을 할 때입니다.
가장 자주 사용하는 VS Code 툴도 정규표현식으로 검색을 지원하고 있고, vim이나 기타 Linux 상에서 검색 등에서도 자주 사용을 하죠.
또, crawling 혹은 scraping 등을 할 때도 자주 사용되니 꼭 익혀두시길 권합니다.
정규표현식의 공식적인 표준은 없는 것으로 알고 있습니다.
가장 널리 사용되는 것은 PCRE이지만, 각각의 툴, 언어 등에 따라 약간씩 차이가 있을 수 있습니다.
기본적인 내용은 거의 공통적으로 사용되니 하나만 배워 두시면 쉽게 다른 곳에서도 적응해서 사용하실 수 있습니다.
Syntax
그러면 기본 개념과 문법부터 하나씩 살펴보도록 합시다.
- 정규표현식은 대소문자 구분을 합니다.
- 공백 문자를 포함하여 각각의 문자는 의미가 있습니다.
- 일부 문자는 특별한 의미가 있습니다. 이는 뒤에서 따로 다루겠습니다.
그럼 이제 특별한 의미가 있는 문자들을 알아봅시다.
- / : Slash는 이 사이에 있는 것들이 정규 표현식임을 알려주는 역할을 합니다. 안써도 되는 경우도 많으니 요령껏 하시면 되요.
- /pattern/option : 주로 이런 식으로 사용하게 되요.
- option도 마찬가지로 적용이 되는 툴과 안되는 툴, 별도의 방법을 써야하는 툴 들이 있어서 요령껏 하시면 되요.
- 보통 g로 전체 영역을 대상으로 할것이냐, 처음 만나는 것만 대상으로 할거냐, m으로 multiline에 pattern을 적용할거냐 이런 option들이 쓰여요.
- ^ : 시작의 의미입니다. 즉 이 이후에 나오는 문자로 시작을 하는 pattern만 적용됩니다.
- $ : 종료의 의미입니다. 즉 이 앞에 있는 문자로 끝나는 pattern만 적용됩니다.
- \ : 특별한 의미 없이 문자 자체를 나타내고 싶을 땐, backslash로 escape 처리를 해줘야 합니다.
- 예를 들어, \$라고 하면 종료의 의미가 사라지고 달러기호 자체를 의미합니다.
- . : Dot는 아무 문자 하나를 나타냅니다. 해당 위치에 문자가 있다는 것만 중요하지 그 문자가 뭐인지는 중요하지 않을 때 사용해요.
- [] : 대괄호는 목록을 나타냅니다. 해당 목록에 있는 문자 아무거나를 의미해요. 문자들의 순서는 상관 없습니다.
- 대괄호 안에 ^ 기호가 사용될 경우 반대의 의미입니다. 해당 목록에 있는 문자를 제외하고의 의미입니다.
- - : 주로 대괄호 안에 사용되는데 범위를 나타냅니다.
- 예를 들어, [0-9]라고 하면 숫자 하나를 의미하게되죠.
- () : 그룹을 나타냅니다. 또, 아주 중요한 것이 있는데, back reference로 기억을 해뒀다가 재사용을 할 수 있습니다.
- 그룹 내에 |를 사용해서 or의 의미로 사용할 수 있습니다.
- ? : 앞에 있는 패턴이 0 또는 1개를 의미합니다. 쉽게말해 있거나 없거나를 말하죠.
- * : 앞에 있는 패턴이 0개 이상을 의미합니다.
- + : 앞에 있는 패턴이 1개 이상을 의미합니다.
- {m, n} : 앞에 있는 패턴이 m개 이상 n개 이하를 의미합니다.
- ?는 {0, 1}, *은 {0,}, +는 {1,}로 바꿔쓸 수 있죠.
- {2}는 정확히 2번 반복됨을 나타내고요.
클래스 문자들도 존재하지만, 이것 역시 지원 여부가 달라서 사용 상에 센스가 좀 필요해요. ㅎㅎㅎ
- \w : [A-Z0-9_] 즉, 영문자, 숫자, _를 의미합니다.
- \W : \w를 제외한 문자를 의미합니다.
- \s : Space, Tab, New line을 의미합니다.
- \S : \s를 제외한 문자를 의미합니다.
- \b : Boundary의 의미입니다. 즉, 이 클래스 문자가 있는 곳은 다른 문자와의 경계가 되어야 합니다.
- \B : \b의 반대의 의미입니다.
- \A : 문자열의 시작을 의미합니다.
- \Z : 문자열의 끝을 의미합니다.
References
다음 참고자료들은 제가 2년 이상 전부터 참고했던 곳인데, 최근에도 따로 더 좋은 곳은 모르겠어서 요걸로 공유 드려볼게요.
“파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"
https://coupa.ng/bSXzMu
이 책은 제가 소장하고 있는 책인데, 얇아서 가볍게 볼 수 있고 내용도 괜찮아서 추천드립니다.
http://zvon.org/comp/r/tut-Regexp.html#Pages~Contents
이 사이트는 간단하게 정규표현식에 대해 정리가 되어 있습니다.
정규표현식을 좀 아는 상태에서 가볍게 훑어보기 좋습니다.
https://regexr.com/
이 사이트에서는 정규표현식을 좀 더 시각적으로 분석해서 복잡한 정규표현식을 이해할 수 있게 해줍니다.
원하는 내용과 정규표현식을 넣어서 확인을 해볼 수도 있어요.
https://regexone.com/
이 사이트에서는 문제를 풀면서 정규표현식을 익혀볼 수 있습니다.
'DevTools' 카테고리의 다른 글
[AWS] Windows EC2 Instance 사용하기 (4) | 2023.01.12 |
---|---|
Development on AWS EC2 through Termius and VSCode (0) | 2022.01.30 |
[VS Code] Extensions 추천 - (2021.09.17) (2) | 2021.09.17 |
[PyCharm] Shortcuts (0) | 2021.01.31 |
[PyCharm] Run Flask Application on PyCharm (0) | 2021.01.26 |
댓글