[C#] 정규 표현식(Regular Expression)

Running boy·2023년 8월 14일
0

컴퓨터 공학

목록 보기
30/36

실제 프로그래밍에서 정규 표현식을 얼마나 많이 쓸지는 잘 모르겠다. (끽해야 문자열 형식 비교하는 정도? ex. email 형식)
하지만 일단 정리해두고 나중에 필요할 때 참고하자.

정규 표현식 구조

패턴

패턴은 메타 문자, 문자 집합과 특수 문자로 이루어진다.

메타 문자

\ ^ $ . | [ ] ( ) * + ? { }

연산자나 예약어에 종종 쓰이는 문자를 메타 문자라고 한다.
역슬래시(\)를 붙여야 하는 것이 특징이다.
자주 쓰이는 두가지만 우선 알아두자.

  1. ^ : 문자열의 시작을 뜻한다.
  2. $ : 문자열의 끝을 뜻한다.

문자 집합

문자 집합은 반드시 대괄호[] 안에 들어가야 한다.

  1. [0-9] : 숫자 0~9에 해당한다.
  2. [a-z] : 알파벳 소문자에 해당한다.
  3. [A-Z] : 알파벳 대문자에 해당한다.
  4. [ㄱ-ㅎ] : 한글 자음에 해당한다.
  5. [ㅏ-ㅣ] : 한글 모음에 해당한다.
  6. [가-힣] : 한글에 해당한다.

이외에서 인코딩이 지원하는 한 모든 언어 규칙에 따라 표현이 가능하다.

굳이 같은 언어가 아니라도 유니코드를 기준으로 '첫번째-마지막' 규칙을 지키면 된다.
즉 [0-z]는 유니코드 기준 0과 z 사이의 모든 문자를 뜻한다. (단 [z-0]과 같이 유니코드가 감소하는 방향이면 예외가 발생한다.)
또한 여러 구간을 포함하고 싶은 경우 붙여쓰면 된다. (ex. [0-9a-z]는 숫자와 알파벳 소문자를 뜻한다.)


특수 문자

\b \t \n ...
, - % ...

이스케이프 문자와 메타 문자가 아닌 특수 문자가 해당된다.


수량자

패턴의 반복 횟수를 뜻하며 패턴의 뒤에 붙는다.

중괄호{} 안에 반복 횟수를 기입한다.

  1. {n} : 패턴이 n번 반복함을 뜻한다.
  2. {n,} : 패턴이 n번 이상 반복함을 뜻한다.
  3. {n,m} : 패턴이 n번 이상 m번 이하 반복함을 뜻한다.

또는 미리 정의된 메타 문자로 수량자를 대신할 수 있다.

  1. * : {0,}과 같다.
  2. + : {1,}과 같다.
  3. ? : {0,1}과 같다.

문법

정규 표현식의 문자열은 반드시 ^로 시작해서 $로 끝난다.

표현식 구조는 비교적 자유로운 편이나 수량자는 반드시 패턴 뒤에 와야 하며 이는 생략이 가능하다.
수량자를 생략했을 경우 디폴트는 {1}이다.

만약 메타 문자 자체를 표현하고 싶다면 앞에 역슬래시를 두번 붙인다. (ex. \\^)

소괄호()를 사용해서 하위 표현식이 가능하다.
복잡한 구조의 표현식은 자칫 수량자를 실수할 수 있으므로 하위 표현식을 사용한다.


아래는 위 규칙을 적용한 예시이다.

class Program
{
    static void Main(string[] args)
    {
        string email = "runningboy@email.com";
        bool isEmail = CheckEmail(email);
        Console.WriteLine(isEmail); // True

        string phoneNumber = "010-1010-1010";
        bool isPhoneNumber = CheckPhoneNumber(phoneNumber);
        Console.WriteLine(isPhoneNumber); // True
    }

    static bool CheckEmail(string expression)
    {
        Regex regex = new Regex("^([0-9a-zA-Z]+)@([0-9a-zA-Z]+)(\\.([0-9a-zA-Z]+))+$");
        return regex.IsMatch(expression);
    }

    static bool CheckPhoneNumber(string expression)
    {
        Regex regex = new Regex("^([0-9]{3})-([0-9]{3,4})-([0-9]{4})$");
        return regex.IsMatch(expression);
    }
}

참고 자료
시작하세요! C# 10 프로그래밍 - 정성태
나무위키 - 정규 표현식

profile
Runner's high를 목표로

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기