고급 PHP 프로그래밍 – 정규 표현식 – 0 – 정규 표현식 문법

고급 PHP 프로그래밍 - 정규 표현식 - 0 - 정규 표현식 문법
고급 PHP 프로그래밍 – 정규 표현식 – 0 – 정규 표현식 문법

고급 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 등 함수별 활용법과 실전 예제들을 더 깊이 다뤄볼게요!
읽어주셔서 감사합니다 🙌

답글 남기기