
고급 PHP 프로그래밍 – 정규 표현식 – 1편: 패턴 매칭과 치환
안녕하세요~ 😄
오늘은 고급 PHP 프로그래밍 정규 표현식 시리즈 1편으로
실제 정규 표현식을 활용한 패턴 매칭과 치환을 배워보려고 해요!
앞서 배운 정규 표현식 문법이 ‘문장을 해석하는 문법책’이라면,
이번 시간은 그 문법을 이용해 실제로 데이터를 분석하고 수정하는 실습 시간이에요!
정규 표현식은 마치 고급 검색+수정기술을 합친 “문자열 마술사”라고도 할 수 있어요🧙♂️✨
정규 표현식으로 할 수 있는 두 가지 대표 작업
✅ 1. 패턴 매칭(Matching)
- 문자열 안에 특정 패턴이 존재하는지 검사
- 패턴과 일치하는 부분을 찾아서 추출하기
✅ 2. 치환(Replace)
- 특정한 패턴에 일치하는 문자열을 다른 문자열로 변경하기
- 예를 들어, 욕설을 “***”로 바꾼다거나, 날짜 포맷을 통일하는 것
1. 패턴 매칭: preg_match()
와 preg_match_all()
📌 preg_match()
- 문자열에서 첫 번째 일치 항목을 찾고, 있으면
1
, 없으면0
을 반환 - 일치한 결과는
$matches
배열에 담김
$pattern = "/[a-z]+@[a-z]+\.[a-z]+/";
$text = "문의는 contact@sample.com 으로 주세요";
if (preg_match($pattern, $text, $matches)) {
echo "이메일 발견: " . $matches[0];
}
결과:
이메일 발견: contact@sample.com
📌 preg_match_all()
- 모든 일치 항목을 배열로 반환
$pattern = "/#[a-z0-9_]+/";
$text = "인기 해시태그: #php #정규표현식 #web_dev";
preg_match_all($pattern, $text, $matches);
print_r($matches[0]);
결과:
Array (
[0] => #php
[1] => #정규표현식
[2] => #web_dev
)
2. 치환: preg_replace()
문자열에서 특정 패턴을 다른 문자열로 바꾸는 함수예요.
$pattern = "/010-\d{4}-\d{4}/";
$replacement = "***-****-****";
$text = "내 번호는 010-1234-5678입니다.";
echo preg_replace($pattern, $replacement, $text);
결과:
내 번호는 ***-****-****입니다.
📌 욕설 필터링 예시
$text = "이건 정말 바보 같은 일이야!";
$pattern = "/바보|멍청이|찌질이/u";
$filtered = preg_replace($pattern, "***", $text);
echo $filtered;
결과:
이건 정말 *** 같은 일이야!
💡 u
플래그는 한글 대응을 위한 UTF-8 모드예요!
3. 콜백을 이용한 치환: preg_replace_callback()
단순한 문자열 교체를 넘어서, 치환 내용을 동적으로 처리하고 싶을 때 사용해요!
📌 예제: 이메일 도메인 감추기
$text = "이메일 목록: user1@naver.com, user2@gmail.com";
$pattern = "/([a-z0-9._%+-]+)@([a-z0-9.-]+\.[a-z]{2,})/i";
$result = preg_replace_callback($pattern, function ($matches) {
return $matches[1] . "@*****";
}, $text);
echo $result;
결과:
이메일 목록: user1@*****, user2@*****
4. 복잡한 패턴 치환 예제
📌 날짜 형식 변환 (YYYY-MM-DD → YYYY.MM.DD)
$text = "오늘은 2025-06-21입니다.";
$pattern = "/(\d{4})-(\d{2})-(\d{2})/";
$replacement = "$1.$2.$3";
echo preg_replace($pattern, $replacement, $text);
결과:
오늘은 2025.06.21입니다.
패턴 매칭 시 자주 쓰는 정규식 조합
패턴 | 의미 |
---|---|
\d{2,4}-\d{2}-\d{2} |
날짜 형식 (예: 2023-01-01) |
[가-힣]+ |
한글 단어 |
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,} |
이메일 |
https?:\/\/[^\s]+ |
URL 주소 |
#[\w가-힣]+ |
한글 포함 해시태그 |
주의할 점 정리 ✅
항목 | 주의사항 |
---|---|
패턴이 과도하면 성능 저하 | 너무 복잡한 정규식은 느려질 수 있어요 |
한글 패턴은 u 플래그 사용 |
preg_match('/패턴/u', $text) 필수 |
\ 이스케이프 필요 |
. 이나 ( 같은 기호는 \. 처럼 써야 의미 전달 |
문자열 치환 시 의도하지 않은 부분 변경 주의 | replace 는 전역 치환이므로 꼭 정확한 패턴 사용 |
마무리하며
오늘은 PHP 정규 표현식에서 가장 많이 쓰이는 패턴 매칭과 치환을 실전 예제 중심으로 배워봤어요.
이제 단순한 문자열 검색뿐만 아니라, 텍스트 내용을 가공하거나 필터링하는 것도 가능하겠죠?
정규 표현식은 처음엔 낯설지만, 사용하다 보면 정말 강력한 무기가 되어줍니다!
다음 시간에는 preg_split()
으로 문자열을 정규식 기반으로 나누는 방법과
복잡한 조건을 조합해서 더욱 유연하게 패턴을 제어하는 기법들을 배워볼게요 😎
감사합니다! 오늘도 코드와 함께 멋진 하루 되세요 🙌