실제 프로그래밍에서 정규 표현식을 얼마나 많이 쓸지는 잘 모르겠다. (끽해야 문자열 형식 비교하는 정도? ex. email 형식)
하지만 일단 정리해두고 나중에 필요할 때 참고하자.
패턴은 메타 문자, 문자 집합과 특수 문자로 이루어진다.
\ ^ $ . | [ ] ( ) * + ? { }
연산자나 예약어에 종종 쓰이는 문자를 메타 문자라고 한다.
역슬래시(\)를 붙여야 하는 것이 특징이다.
자주 쓰이는 두가지만 우선 알아두자.
문자 집합은 반드시 대괄호[] 안에 들어가야 한다.
- [0-9] : 숫자 0~9에 해당한다.
- [a-z] : 알파벳 소문자에 해당한다.
- [A-Z] : 알파벳 대문자에 해당한다.
- [ㄱ-ㅎ] : 한글 자음에 해당한다.
- [ㅏ-ㅣ] : 한글 모음에 해당한다.
- [가-힣] : 한글에 해당한다.
이외에서 인코딩이 지원하는 한 모든 언어 규칙에 따라 표현이 가능하다.
굳이 같은 언어가 아니라도 유니코드를 기준으로 '첫번째-마지막' 규칙을 지키면 된다.
즉 [0-z]는 유니코드 기준 0과 z 사이의 모든 문자를 뜻한다. (단 [z-0]과 같이 유니코드가 감소하는 방향이면 예외가 발생한다.)
또한 여러 구간을 포함하고 싶은 경우 붙여쓰면 된다. (ex. [0-9a-z]는 숫자와 알파벳 소문자를 뜻한다.)
\b \t \n ...
, - % ...
이스케이프 문자와 메타 문자가 아닌 특수 문자가 해당된다.
패턴의 반복 횟수를 뜻하며 패턴의 뒤에 붙는다.
중괄호{} 안에 반복 횟수를 기입한다.
- {n} : 패턴이 n번 반복함을 뜻한다.
- {n,} : 패턴이 n번 이상 반복함을 뜻한다.
- {n,m} : 패턴이 n번 이상 m번 이하 반복함을 뜻한다.
또는 미리 정의된 메타 문자로 수량자를 대신할 수 있다.
- * : {0,}과 같다.
- + : {1,}과 같다.
- ? : {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);
}
}
감사합니다. 이런 정보를 나눠주셔서 좋아요.