본문 바로가기
IT Study/YouTube 영상 후기

10분 테코톡 - 정규 표현식

by hhyyyjun 2022. 12. 24.
 

| 정규표현식의 이해

1951년도 수학자 Stephen Colr Kleene에 의해 만들어짐

1.편집기의 패턴 매칭을 시작으로 사용

2. grep 명령어가 정규표현식을 사용

3. vi, emacs같은 편집기나 sed, awk같은 유닉스 명령어에 정규 표현식이 추가

4. 이후 IDE와 여러 프로그래밍 언어의 표준 라이브러리로 지정됨

특징

특정 패턴을 가지고 문자열을 찾을 수 있다.

메타문자

문자를 나타내는 문자

. : 모든 문자

[] : 대괄호 안에 들어가있는 문자를 찾음, 대괄호 안 ^은 NOT을 의미

| : or

\s : 공백

\d : [0-9]

\w : 영문자, 숫자, 밑줄 [0-9a-zA-Z]

수량자

앞 문자의 개수

? : 앞 문자가 없거나 하나 있음 ({0,1})

+ : 앞 문자가 하나 이상 ({1, })

* : 앞 문자가 0개 이상임({0, })

{n, m} : 앞 문자가 n개 이상, m개 이하

{n, } : 앞 문자가 n개 이상, 위의 형태에서 m이 생략된 형태

{n} : 앞 문자가 n개

패턴 안에 ^, $

^ : 찾으려는 문자열의 처음을 뜻함

$ : 찾으려는 문자열의 끝을 뜻함

졍규 표현식 = 패턴 구분자 시작(/) + 작성할 패턴(패턴) + 패턴구분자 끝(/) + 패턴 변경자(g)

전화번호의 정규표현식 분석

핵심 : 메타문자와 수량자를 잘 파악하자!

빨간색 : 메타문자

하늘색 : 수량자

\d{2,3}-​?\d{3,4}-?\d{4}

ex)

/^\d{2,3}-?\d{3,4}-?\d{4}$/g

010-1234-1234

02-123-1234

031-312-4231

01012342034

021231234

>> 010-1234-1234 -> 패턴에 맞는 값만 찾는다.

장점 : 패턴으로 검증이 가능, if문을 많이 사용하지 않아도 된다.

단점 : 너무 안 좋은 가독성과 유지보수가 힘들다.

>>

1) 간단한 검증일 때는 if문으로 해결하자

2) 메서드 명을 통해 가독성을 높이자

3) 복잡한 검증이 있을 때만 정규표현식을 사용하자

4) 주석을 달아서 가독성을 높이자

| 정규표현식의 활용

정규표현식이 쓰이는 곳

1. 컴파일러의 파서

2. cli 환경을 주로 사용하는 경우 grep, sed, awk를 통해 쓰임

3. 이메일, 주소, 전화번호 규칙 검증

4. 입력에서 불필요한 입력 검증

5. 개발도구에서 문자열 치환

6. 로깅에서 찾아볼 때

7. 코딩테스트

개발도구에서 문자열 치환

인텔리제이는 정규표현식 문자열 치환을 지원함

Mac : command + r

Window : Ctrl + r

| Java에서 정규표현식의 활용

1. 문자열에서 알파벳 대문자, 숫자, 더하기, 밑줄, 마침표를 제외하 모든 문자를 제거하라

2. 문자열에서 마침표가 3번 이상 연속된 부분을 하나의 마침표로 치환하라

1. private String removeChar(String input){

         return input.replaceAll(regex : "[^A-Z0-9+_.]", replacement : "");

    }

2. private String changeDot(String input){

         return input.replaceAll(regex : "[.]{3,}", replacement : ".");

   }

Pattern 객체는 불변 객체이다

패턴 클래스는 정적 팩토리 메서드를 사용하고 있으며 Thread-safe 하다.

Matcher 클래스 사용 시 주의할 점

Matcher 객체는 reset()하고 다시 input을 넣어 재사용해줄 수 있지만 Thread-safe하지 못하다.

Thread-safe 하게 사용하려면 pattern 객체의 matcher()를 통해 matcher를 생성한 뒤 사용해야한다.

정규표현식 학습

1.개발자도 모든 정규표현식을 외우고 있지 않음

2. 알고리즘처럼 감을 잃지 않도록 하는 것이 중요

3. IDE에서 문자열을 replace할 일이 있을 때 정규표현식을 사용해 연습

정규표현식 요약

1.클린코드를 위해 정규표현식을 사용할 때는 고민하고 사용하자

2. 정규표현식을 분석하는데 핵심은 메타문자와 수량자 파악

3. Java에서 정규표현식을 사용할 때는 pattern은 변하지 않으므로 정적으로 만들자

4. Java의 Matcher 객체는 Thread safe하지 못하다. 멀티스레드 환경이라면 pattern의 matcher()를 사용하자

5. 정규표현식은 그때 그때 알아보자

댓글