자 서른 여덟 번째 키워드인 정규식을 알아 볼 것이다.
정규화는 들어 봤어도 정규식은 처음들어보는 개념이라 부족할 수 있으니 양해 부탁드립니다.

정규식(정규 표현식, Regular Expression, regex)은 문자열에서 특정 패턴을 찾고, 일치하는 부분을 추출하거나, 치환하거나, 검증하는 데 사용하는 문자열 패턴을 나타내는 방법이라고 한다.
정규식은 문자열의 검색 및 조작을 자동화하는 도구로, 주로 프로그래밍 및 텍스트 처리에서 많이 사용된다.
정규식은 여러 가지 특수 문자와 메타 문자를 사용하여 특정 패턴을 표현한다.
이를 통해 문자열 검색, 치환, 검증 등을 수행할 수 있다.
문자 클래스는 대괄호 [] 안에 포함된 문자 중 하나와 일치한다.
'[abc]' - 'a', 'b', 또는 'c' 중 하나
'[a-z]' - 소문자 알파벳 중 하나 (a부터 z까지)
'[A-Z]' - 대문자 알파벳 중 하나 (A부터 Z까지)
'[0-9]' - 숫자 중 하나 (0부터 9까지)
'[^abc]' - 'a', 'b', 'c'가 아닌 문자
'[\d\w]' - 숫자(\d) 또는 단어 문자(\w) 중 하나
수량자는 특정 패턴이 몇 번 반복될지를 나타낸다.
'a*' - 'a'가 0번 이상 반복
'a+' - 'a'가 1번 이상 반복
'a?' - 'a'가 0번 또는 1번
'a{n}' - 'a'가 정확히 n번 반복
'a{n,}' - 'a'가 n번 이상 반복
'a{n,m}' - 'a'가 n번 이상 m번 이하 반복
경계는 특정 위치를 나타낸다.
'^' - 문자열의 시작
'$' - 문자열의 끝
'\b' - 단어의 경계 (단어의 시작이나 끝)
'\B' - 단어가 아닌 경계 (단어의 시작이나 끝이 아닌 위치)
특수 문자는 특정한 의미를 가지며, 특정 종류의 문자와 일치한다.
'.' - 임의의 한 문자 (줄 바꿈 문자를 제외)
'\d' - 숫자 문자 [0-9]와 동일
'\D' - 숫자가 아닌 문자
'\w' - 단어 문자 (알파벳, 숫자, 밑줄)
'\W' - 단어 문자가 아닌 문자
'\s' - 공백 문자 (스페이스, 탭, 줄 바꿈 등)
'\S' - 공백 문자가 아닌 문자
괄호 ()를 사용하여 부분 패턴을 그룹화하고 캡처할 수 있다.
'(abc)' - 'abc'와 일치하며, 캡처 그룹 1
'(?:abc)' - 'abc'와 일치하지만 캡처하지 않음 (비캡처 그룹)
'(?P< name >abc)' - 'abc'와 일치하며, 캡처 그룹에 이름 'name' 지정
선택은 파이프 |를 사용하여 여러 패턴 중 하나와 일치한다.
'a|b' - 'a' 또는 'b'
'(abc|def)' - 'abc' 또는 'def'
특수 문자를 일반 문자로 사용하려면 백슬래시 \를 사용하여 이스케이프한다.
'.' - 실제 점 문자 '.'
'\' - 실제 백슬래시 문자 ''
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
'^[a-zA-Z0-9._%+-]+' - 알파벳, 숫자, '.', '_', '%', '+', '-' 문자가 1개 이상 반복되고, 문자열의 시작과 일치함
'@[a-zA-Z0-9.-]+' - '@' 뒤에 알파벳, 숫자, '.', '-' 문자가 1개 이상 반복됨
'.[a-zA-Z]{2,}$' - '.' 뒤에 알파벳 문자가 2개 이상이며, 문자열의 끝과 일치함
^01[016789]-\d{3,4}-\d{4}$
'^01[016789]' - '01' 뒤에 '0', '1', '6', '7', '8', '9' 중 하나가 옴
'-\d{3,4}' - '-' 뒤에 숫자가 3개에서 4개 옴
'-\d{4}$' - '-' 뒤에 숫자가 4개 있으며, 문자열의 끝과 일치함
using System.Text.RegularExpressions;
using UnityEngine;
public class RegexExampleUnity : MonoBehaviour
{
void Start()
{
string pattern = @"^01[016789]-\d{3,4}-\d{4}$";
string[] phoneNumbers = { "010-1234-5678", "011-123-4567", "123-4567-8901" };
foreach (var number in phoneNumbers)
{
if (Regex.IsMatch(number, pattern))
{
print($"{number} 이 번호는 형식에 맞음.");
}
else
{
print($"{number} 이 번호는 형식에 맞지 않음");
}
}
}
}
위 코드처럼 RegularExpressions의 네임스페이스를 사용하여 Regex.IsMatch() 함수를 통해
검사하였다.
정규식은 다양한 상황에서 매우 강력한 도구이다. 이를 통해 문자열을 보다 효율적으로 처리하고 원하는 패턴을 쉽게 찾을 수 있다고 한다.
와 진짜 이번꺼는 이론보다는 그냥 수학 공식을 다시 보는 느낌이었다.
각종 이상한 문자를 보면서 '이렇게 조합하면 검사를 할 수 있구나...' 를 깨달았다.
이런걸 진작에 알았다면 다양한 분야에 사용했을것 같다.