[Programming] 정규표현식의 정의와 개념정리에 대해 ARABOZA.

Dtrip·2022년 6월 12일
0
post-custom-banner

정규식의 기본 형태

정규식의 패턴은 두 개의 슬래시(/) 사이에 입력하고, 뒤에는 수식자(Modifier)를 기술합니다. 경우에 따라서 수식자를 생략할 수도 있습니다.

Engineering Number Format Example.png
위 예시에서 두 개의 빨간색 슬래시 사이에 있는 외계어가 정규식 패턴이고, 뒤따라 나오는 gi는 수식자입니다.

참고로, 이 패턴은 '-23.534E5'와 같은 공학적 숫자 표현(Engineering Number Format)을 의미합니다.

수식자 (Modifiers)

수식자는 패턴 검색 과정에서 전체적으로 적용할 규칙을 기술합니다. 기본적으로 다음과 같이 세 개의 수식자를 지원하며, 사용하는 정규식 엔진에 따라서 추가적인 옵션을 제공할 수도 있습니다.

i : 대소문자 무시 (Ignore case)
g : 모든 패턴 검색 (Global match)
m : 여러 줄에 걸친 패턴 허용 (Multiline match)
'모든 패턴 검색' 옵션은 패턴 연산에서 일치하는 첫 번째 패턴을 찾았을 경우 검색을 중단할 지 여부를 지정합니다. 이 옵션을 지정하지 않으면 치환 연산에서 처음 발견한 패턴만 치환하고 연산을 종료합니다.

한정자 (Quantifiers)

이제 본격적으로 위에서 언급한 외계어가 구체적으로 무엇을 의미하는지 하나씩 뜯어보도록 하겠습니다.

정규식은 특정 문자열이 아닌, 패턴(Pattern)을 다루는 연산식이기 때문에 이들 패턴을 나타내는 다양한 한정자들을 지원합니다. 한정자들을 조합해서 원하는 패턴을 나타내는 정규식을 작성할 수 있습니다.

.
하나의 문자.
단, 수식자 m이 지정되지 않은 경우 New line 문자(\n)는 무시됩니다.

[]
문자 클래스.
여러 개의 문자를 묶어서 '이들 중 하나', 혹은 '이들 제외'를 의미합니다.

()
문자 그룹.
기본적으로 패턴 추출 연산에서 추출할 패턴을 지정할 때 사용하며, 연산의 우선순위를 지정할 때도 사용할 수 있습니다.

\
Escape.
\t(Tab 문자), \s(White space), \d(숫자)와 같은 특수문자를 나타내거나, .(Period '.'), \^(^)와 같이 한정자를 일반 문자로 인식시켜야 하는 경우 사용합니다.

|
OR.

예) (http|ftp) : 'http' 또는 'ftp'

^
NOT. / 줄의 시작.
문자 클래스의 전단에 지정해서 '나열된 문자를 제외한 임의의 문자'를 의미합니다.
정규식의 Leading Slash 직후에 사용된 경우, 줄의 시작을 의미합니다.

예) [^!&*;:'"\/] : !, &, *, ;, :, ', ", \, /를 제외한 임의의 문자

$
줄의 끝.
정규식의 Trailing Slash 직전에 사용되어 줄의 끝을 의미합니다.

예) /^.*$/ : 빈 줄을 포함한 한 줄

  • 0회 이상 반복.
    직전에 나타낸 문자/문자 클래스/문자 그룹이 0회 이상 반복됨을 의미합니다.

e.g.) .* : 빈 문자열("")을 포함한 아무 문자열

  • 1회 이상 반복.
    직전에 나타난 문자/문자 클래스/문자 그룹이 1회 이상 반복됨을 의미합니다.

예) .+ : 빈 문자열("")을 제외한 아무 문자열

?
0회 또는 1회.
직전에 나타난 문자/문자 클래스/문자 그룹이 1회 나타나거나 아예 나타나지 않음을 의미합니다.

예) https? : 'http' 또는 'htttps'

{m}
m회 반복.
직전에 나타난 문자/문자 클래스/문자 그룹이 m회 반복됨을 의미합니다.

예) [\d]{3} : '123', '032', '564', ...

{m,}
m회 이상 반복.
직전에 나타난 문자/문자 클래스/문자 그룹이 m회 이상 반복됨을 의미합니다.

예) a{2,}b : 'aab', 'aaab', 'aaaab', ...

{,n}
n회 이하 반복.
직전에 나타난 문자/문자 클래스/문자 그룹이 n회 이하 반복됨을 의미합니다.

예) a{,2}b : 'b', 'ab' 또는 'aab'

{m,n}
m~n회반복.
직전에 나타난 문자/문자 클래스/문자 그룹이 m~n회 반복됨을 의미합니다.

예) a{2,3}b : 'aab' 또는 'aaab'

정규식 예제
자주 사용되는 정규식의 예제를 몇 개 나열해 보았습니다. 위에서 언급한 다양한 한정자들이 어떻게 조합되어 패턴을 나타내는지 주의 깊게 살펴보세요.

Hex color code

예) '#00AABC', '#EFEFEF'

전화번호

예) 02-123-4567

이메일 주소

예) admin-08@gmail.com

웹 페이지 URL

예) http://google.com:80

그림 파일명

예) favicon.png

profile
Devtrip
post-custom-banner

0개의 댓글