
고급 PHP 프로그래밍 – 정규 표현식 – 0편: 정규 표현식 문법 완전 정복!
안녕하세요~ 😄
오늘은 고급 PHP 프로그래밍 시리즈의 첫 번째 시간!
많은 분들이 막연하게 어렵게 느끼는 **정규 표현식(Regular Expression)**의 문법에 대해 쉽고 친절하게 설명해드릴게요!
정규 표현식은 처음 보면 마치 외계어 같지만, 알고 보면 문자열을 다루는 강력한 마법 도구랍니다.
우리가 원하는 패턴의 문자만 쏙쏙 뽑아낼 수 있는 고급 필터링 도구라고 보시면 돼요.
정규 표현식이란 무엇인가요?
정규 표현식(Regular Expression)은 특정한 규칙(패턴)을 가진 문자열을 찾기 위한 표현 방식이에요.
비유하자면,
👉 정규 표현식은 마치 “보물지도의 X 표시” 같아요.
문자열이라는 광활한 텍스트 속에서 원하는 정보만 정확하게 찾아내는 지도 역할을 해주죠!
PHP에서 정규 표현식을 사용하는 함수들
PHP에서는 정규 표현식을 다룰 때 아래 함수들을 주로 사용해요:
함수명 | 설명 |
---|---|
preg_match() |
문자열이 패턴과 일치하는지 확인 |
preg_match_all() |
패턴과 일치하는 모든 부분을 찾음 |
preg_replace() |
일치하는 패턴을 다른 문자열로 대체 |
preg_split() |
정규식 기준으로 문자열 분할 |
정규 표현식의 기본 문법 구조
정규 표현식은 기본적으로 아래처럼 생겼어요:
/패턴/플래그
예를 들어, /abc/i
라면:
abc
: 찾을 패턴i
: 대소문자 구분 없음
자주 쓰는 정규 표현식 기호 정리
1. 문자 클래스 (Character class)
표현식 | 의미 | 예시 |
---|---|---|
. |
모든 문자 1개 (줄바꿈 제외) | a.c → abc, a7c 등 |
[...] |
괄호 안 문자 중 하나 | [aeiou] → 모음만 |
[^...] |
괄호 안 제외한 문자 중 하나 | [^0-9] → 숫자 제외한 것 |
[a-z] |
소문자 알파벳 | [A-Z] 대문자 |
[0-9] |
숫자 0~9 | [a-zA-Z0-9] → 알파벳+숫자 |
2. 수량자 (Quantifiers)
표현식 | 의미 | 예시 |
---|---|---|
* |
0번 이상 | lo*l → ll, lol, loool |
+ |
1번 이상 | lo+l → lol, loool |
? |
0번 또는 1번 | lo?l → ll, lol |
{n} |
정확히 n번 | a{3} → aaa |
{n,} |
n번 이상 | a{2,} → aa, aaa, aaaa |
{n,m} |
n~m번 사이 | a{2,4} → aa ~ aaaa |
3. 경계자 (Anchors)
표현식 | 의미 | 예시 |
---|---|---|
^ |
문자열 시작 | ^Hello → Hello로 시작 |
$ |
문자열 끝 | world$ → world로 끝 |
\b |
단어 경계 | \bcat\b → ‘cat’만, ‘category’는 제외 |
\B |
단어 경계 아님 | \Bcat\B → 단어 내부의 cat |
4. 이스케이프 문자 (Escape characters)
표현식 | 의미 | 예시 |
---|---|---|
\d |
숫자 [0-9] |
|
\D |
숫자 아닌 것 | |
\w |
단어문자 [a-zA-Z0-9_] |
|
\W |
단어문자 아닌 것 | |
\s |
공백 문자 (스페이스, 탭 등) | |
\S |
공백 아닌 문자 |
플래그(옵션) 설명
플래그 | 의미 |
---|---|
i |
대소문자 구분 없이 |
m |
여러 줄에 대해 시작(^ )과 끝($ ) 인식 |
s |
. 이 줄바꿈 문자도 포함 |
u |
UTF-8 인코딩 사용 (한글 포함 시 필수!) |
예제와 함께 익혀볼까요?
예제1: 이메일 주소 찾기
$pattern = '/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i';
$email = "이메일은 test123@example.com 입니다.";
if (preg_match($pattern, $email, $matches)) {
echo "이메일 발견: " . $matches[0];
}
✅ 출력: 이메일 발견: test123@example.com
예제2: 핸드폰 번호 확인
$pattern = '/^01[016789]-?\d{3,4}-?\d{4}$/';
$phone = "010-1234-5678";
if (preg_match($pattern, $phone)) {
echo "유효한 번호입니다!";
}
✅ 하이픈(-) 유무 상관없이 체크 가능
예제3: 숫자만 제거하기
$text = "주소: 서울시 강남구 123번지";
$result = preg_replace('/\d+/', '', $text);
echo $result;
✅ 출력: 주소: 서울시 강남구 번지
정규 표현식 실전 활용 팁
- 로그인 유효성 검사 (아이디, 이메일, 비밀번호 등)
- 게시판 욕설 필터링
- 특정 형식 데이터 추출 (날짜, 우편번호 등)
- 웹 크롤링 시 텍스트 추출 필터로 활용
주의해야 할 점 정리 ✅
항목 | 주의사항 |
---|---|
\ 백슬래시 누락 |
정규 표현식은 백슬래시를 자주 쓰므로 꼭 escape 처리 필요! |
한글 처리 | 정규 표현식에 u 플래그 꼭 추가! (/pattern/u ) |
너무 과한 패턴 매칭 | 성능 이슈 발생 가능 (특히 대량 데이터 검색 시) |
보안 위험 | 사용자 입력값에 정규식을 적용할 땐 반드시 필터링 필요 |
마무리하며
정규 표현식은 어렵고 딱딱하게만 느껴질 수 있지만,
조금만 익숙해지면 정말 강력하고 유용한 무기가 된답니다! ⚔️
문자열 처리에 자주 쓰이는 만큼, 오늘 배운 문법들을 꼭 기억해두셨다가
실무에서도 다양하게 활용해보시길 바라요 😊
다음 시간에는 preg_match, preg_replace 등 함수별 활용법과 실전 예제들을 더 깊이 다뤄볼게요!
읽어주셔서 감사합니다 🙌