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

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

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

안녕하세요! 😊
이번 시간에는 PHP에서 굉장히 강력한 도구인 **정규 표현식(Regular Expression)**의 문법에 대해 자세히 알아보겠습니다.
정규 표현식은 문자나 문자열을 특정한 패턴으로 검색하거나 대체할 수 있는 도구로, 마치 문자들 사이를 날렵하게 헤엄치는 탐색견 같다고 볼 수 있어요 🐶

이 도구를 잘 다루면, 이메일 주소 검사부터 로그 분석, 문자열 필터링, 대용량 텍스트 처리까지 정말 다양하게 활용할 수 있답니다!


정규 표현식이란?

정규 표현식(Regular Expression, 줄여서 regex 또는 regexp)은
특정한 규칙을 가진 문자열의 집합을 정의하는 표현 방법입니다.

간단한 예시:

preg_match("/cat/", "I have a cat."); // "cat"이 존재하므로 true

정규 표현식은 단순 문자열 비교가 아니라, 패턴을 기반으로 문자열을 유연하게 탐색할 수 있어요!


PHP에서 정규 표현식을 사용하는 함수들

함수명 설명
preg_match() 문자열에서 패턴이 일치하는지 확인
preg_match_all() 문자열에서 모든 일치 항목 찾기
preg_replace() 일치하는 부분을 치환
preg_split() 패턴 기준으로 문자열 분리

정규 표현식 문법 기본

✅ 1. 리터럴 문자

그냥 평범한 문자들은 있는 그대로 매칭합니다.

preg_match("/dog/", "hotdog"); // true

✅ 2. 특수 문자

정규 표현식에서는 특별한 의미를 가지는 문자가 있어요.

문자 의미
. 임의의 한 문자
^ 문자열의 시작
$ 문자열의 끝
* 앞 문자가 0번 이상 반복
+ 앞 문자가 1번 이상 반복
? 앞 문자가 0 또는 1번 나옴
[] 문자 클래스, 대괄호 안의 문자 중 하나
` | ` OR 조건
() 그룹화
\ 이스케이프 문자 (특수문자 무력화)

✅ 3. 문자 클래스 []

  • [abc] : a, b, c 중 하나
  • [a-z] : 소문자 a부터 z까지
  • [0-9] : 숫자 0부터 9까지
preg_match("/[A-Z]/", "Hello"); // 대문자 'H'가 있으므로 true

✅ 4. 수량자

표현식 의미 예시
a* a가 0번 이상 “”, “a”, “aaa” 모두 매칭
a+ a가 1번 이상 “a”, “aa”는 매칭, “”은 아님
a? a가 0 또는 1번 “”, “a”는 매칭
a{3} a가 정확히 3번 “aaa”만 매칭
a{2,} a가 2번 이상 “aa”, “aaa”, …
a{2,4} a가 2~4번 “aa”, “aaa”, “aaaa” 매칭

✅ 5. 앵커(Anchor)

표현 설명
^ 문자열 시작
$ 문자열 끝
preg_match("/^hello/", "hello world"); // true
preg_match("/world$/", "hello world"); // true

✅ 6. 그룹과 선택

기호 의미
() 그룹 지정
` | ` OR 조건
preg_match("/(cat|dog)/", "I love dogs"); // true

✅ 7. 이스케이프 문자 \

특수문자를 문자 그대로 인식시키기 위해 사용합니다.

preg_match("/\./", "file.txt"); // 점(.) 문자 찾기

정규 표현식 실전 예제

📧 이메일 주소 검사

$email = "hello@example.com";
if (preg_match("/^[\w\-\.]+@([\w\-]+\.)+[a-zA-Z]{2,7}$/", $email)) {
  echo "올바른 이메일입니다!";
}

📞 전화번호 형식 검사

$tel = "010-1234-5678";
if (preg_match("/^01[0|1|6|7|8|9]-\d{3,4}-\d{4}$/", $tel)) {
  echo "전화번호 형식이 맞습니다!";
}

🔐 비밀번호 강도 검사 (영문+숫자+특수문자, 8자 이상)

$password = "abc123@!";
if (preg_match("/^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W_]).{8,}$/", $password)) {
  echo "강력한 비밀번호입니다!";
}

주의해야 할 점

항목 주의사항
구분자 / 외에도 #, ~ 등도 가능하지만 시작과 끝이 맞아야 해요.
특수문자 처리 . * + 등은 꼭 \로 이스케이프 해야 문자 그대로 인식됩니다.
다국어 처리 유니코드를 사용할 때는 u 플래그 추가 (/패턴/u)
성능 너무 복잡한 정규식은 성능 저하 원인이 될 수 있으니 꼭 테스트하세요!

마무리하며 😊

정규 표현식은 익숙해지면 정말 강력한 도구예요!
초반에는 기호가 많고 생소해서 어렵게 느껴질 수 있지만,
하나하나 연습하다 보면 “어? 이거 내가 만들었네?” 하는 날이 올 거예요.

다음 시간에는 정규 표현식을 활용해 문자열을 매칭하고 치환하는 실전 코드를 자세히 알아볼게요!
궁금한 패턴이 있다면 언제든 질문 주세요~

정규 표현식의 세계로 한 발 더 나아가 볼까요? 🧙‍♂️💻

답글 남기기