Language/Etc.

정규 표현식(Regular Expression) 기본 문법들 및 테스트 방법

재은초 2023. 10. 22. 19:21
반응형

기본적으로 알아야 하는 정규 표현식

  • 집합은 표현하고 싶은 문자를 대괄호 [ ] 에 넣는 식으로 사용한다. 대괄호 안에 들어간 문자들은 or 연산이 적용되어 집합 안에 있는 문자 중 하나라도 매칭되면 선택된다.
[bce]ar                                                   // bar/car/ear를 동시에 선택
[0123456789]                                              // 문장에 있는 모든 숫자
[abcdefghijklmnopqrstuvwxyz]                              // 알파벳 중 소문자만
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]                              // 알파벳 중 대문자만
[ABCDEFGHIJKLMNOPQRSTUVWXYZ][abcdefghijklmnopqrstuvwxyz]  // 대소문자가 붙어서 나오는 부분 선택
  • 하이픈 - 은 문자 사이의 범위를 나타낸다.
[0-9]                  // 숫자
[a-z]                  // 영어 소문자
[A-Z]                  // 영어 대문자
[가-힣]                 // 한글(자음 모음 조합)

[0-9A-Z]               // 숫자와 대문자 영어 알파벳으로 된 부분들을 모두 선택
  • 캐럿 ^ 은 집합 안의 특정 문자들을 제외하여 선택하고 싶을 때 사용한다.
  • 참고로 캐럿은 집합 안에 있는 모든 문자를 제외시킨다. 그래서 [^0-9]라고 입력했을 때 숫자 0만 제외되는게 아니라 모든 숫자가 다 제외된다.
  • 한 가지 주의할 점은 이런 부정의 의미로 캐럿을 사용할 때는 집합에 가장 처음에 위치해야 한다. 
[^0-9]              // 숫자를 제외한 모든 문자들을 선택

[0-9^a-z]           // 숫자, ^라는 문자, 소문자를 모두 선택하라는 뜻
  • 문자 클래스는 자주 사용하는 집합들을 좀 더 쉽게 사용할 수 있도록 한 일종의 예약어다. 보통 백슬래시 \ 뒤에 특정 알파벳을 합쳐서 표기한다.
  • \d는 모든 숫자를 나타내는 집합 [0-9] 의 예약어다. \w는 영어 대소문자, 숫자, 언더바(_)를 선택해 준다. \s는 스페이스 바, 탭 등 문자와 문자 사이를 구분 짓는 공백은 모두 선택된다. 
\d             // [0-9] 숫자
\w             // [a-zA-Z0-9_] 영어 대소문자 + 숫자 + _(언더바)
\s             // [ \t\n\r\f\v] 공백 문자
  • 모든 문자 클래스의 알파벳을 대문자로 쓰면 부정의 의미가 된다.
\D            // [^0-9] 숫자가 아닌 것
\W            // [^a-zA-Z0-9_] 영어 대소문자 + 숫자 + _(밑줄) 아닌 것
\S            // [^ \t\n\r\f\v] 공백 문자가 아닌 것
  • 도트 . 는 숫자, 알파벳, 특수 문자, 공백, 한글 등 말 그대로 표현 가능한 모든 문자를 의미한다.
h.                   // h 뒤에 무엇이 오더라도 선택
  • 대괄호 [ ] , 캐럿 ^ , 도트 . 등의 문자를 메타 문자가 아니라 일반 문자로 사용하고 싶을 수 있는데, 이러한 상황에서 필요한 것이 바로 이스케이핑 \ 이다.
\.            // 모든 문자를 뜻하는 도트가 아니라 마침표 . 를 의미
  • 수량자는 문자의 반복 횟수를 설정하는 문법이다. 기본 형태는 반복하고 싶은 문자 {수량자} 다.
// 모두다 같은 표현 : 잇다른 4자리 숫자를 의미

[0123456789][0123456789][0123456789][0123456789]
[0-9][0-9][0-9][0-9]
\d\d\d\d
\d{4}
  • 수량자를 {min,max} 형태로 사용하면 수량자 앞에 있는 문자가 지정해 준 최솟값 이상, 최댓값 이하로 나온 경우에 선택한다. 참고로 최솟값과 최댓값을 입력할 때에는 콤마를 기준으로 공백 없이 붙여서 써줘야 한다.
  • 참고로 최솟값만 빈칸으로 두는 것 {,max} 은 불가능하다. 만약에 최대 반복 횟수를 지정하고 싶다면 {1, max} 로 입력하면 된다. 
\d{3,6}           // 최소 3에서 최대 6자리 숫자
\d{3,}            // 최소 3자리부터 시작하는 모든 숫자
  •  * 와  + 는 제한 없이 모든 숫자를 나타낸다. 수량자 앞에 문자가 몇 번 반복되더라도 모두 다 선택해준다.
  • 하지만 * 는 앞에 문자가 하나도 없어도 선택해준다. 즉 문자가 0번부터 무한대까지 반복되는 경우를 선택한다.
  • 하지만 + 는 앞에 최소 1개의 문자는 반드시 필요하다. 1번부터 무한대까지 반복되는 경우를 선택하는 의미다.
  • ? 는 문자가 아예 없거나 하나만 있을 경우를 선택해 줍니다. 0번 또는 1번 반복될 때 선택해 주는 의미다.
\d*원                // 앞에 없어도 선택
\d+원                // 앞에 있어야 선택
jpe?g               // 있거나 없거나 둘 다 선택
  • \b, \B 는 문자가 아니라 위치를 나타내는 메타 문자다. 문자가 아니기 때문에 당연히 결과에 포함되지 않고 결과의 경계 부분을 표시하는 역할만 한다.
  • \b 는 문자 \w 와 문자가 아닌 곳 \W 사이의 위치에 해당하는 경계다. \B 는 반대로 단어의 경계가 아닌 위치를 가리킨다.
\bis\b             // 앞 뒤 경계가 있는 is 선택
  • 캐럿 ^ 과 달러 $ 를 사용하면 단어가 아닌 문장의 경계를 나타낼 수 있다. 캐럿 ^ 은 문장의 시작점, 달러 $ 는 끝 지점을 의미한다.
  • 캐럿 ^ 은 집합 안에서 쓰이면 부정, 밖에서 쓰이면 경계의 의미를 갖게 된다. 
^This island is beautiful$        // 문장 시작과 끝

 

정규 표현식 테스트 방법

https://regex101.com/

FLAVOR

  • 프로그래밍 언어에 따라 지원되는 정규 표현식 문법에 조금씩 차이가 있다. 그래서 정규 표현식의 실행 환경을 어떤 프로그래밍 언어 기반으로 할지 미리 정해야 하는데, Flavor 메뉴에서 언어를 선택할 수 있다.

TEST STRING

  • 실습을 할 텍스트 본문을 입력하는 곳이다. 'insert your test string here'이라는 안내 문구가 적힌 입력창에 원하는 텍스트 본문을 넣어 주면 된다.

REGULAR EXPRESSION

  • 원하는 정규 표현식을 작성하는 곳이다. 이곳에 정규 표현식을 작성하면 TEST STRING에 입력된 문자열 중 해당 정규 표현식에 일치하는 부분이 하이라이트된다.
  • 하나의 문자가 아니라 단어를 찾을 때에도 완전히 일치하는 문자열을 정규 표현식으로 작성해 주면 해당 부분이 선택된다.
  • 참고로 정규 표현식의 기본 설정에서는 문자열의 대소문자를 구분한다. 

EXPLANATION

  • 사용자가 입력한 정규 표현식을 해석한 내용을 보여준다.

MATCH INFORMATION

  • 필요한 정규 표현식 문법을 검색하고 찾아볼 수 있다.

 

반응형