
고급 PHP 프로그래밍 – 정규 표현식 함수
안녕하세요! 😊
이전 시간까지 정규 표현식의 기본 문법과 패턴 매칭·치환 방법을 알아보았죠?
이번에는 PHP에서 정규 표현식을 본격적으로 사용할 수 있도록 도와주는 정규 표현식 함수들을 하나씩 자세히 살펴볼게요.
정규 표현식을 사용할 수 있는 함수는 단순히 “찾기”만 하는 게 아니라,
찾고, 바꾸고, 나누고, 응용하고—마치 문자열 속에서 원하는 조각을 퍼즐처럼 정확히 다룰 수 있게 해준답니다 🧩
PHP 정규 표현식 함수 요약
함수 | 설명 | 대표 용도 |
---|---|---|
preg_match() |
첫 번째 일치 항목 찾기 | 유효성 검사, 패턴 확인 |
preg_match_all() |
모든 일치 항목 찾기 | 대량 추출 |
preg_replace() |
문자열 치환 | 마스킹, 형식 변경 |
preg_replace_callback() |
콜백을 통한 치환 | 동적 변경 |
preg_split() |
패턴 기준으로 문자열 분리 | 복합 구분자 분할 |
preg_grep() |
배열에서 정규식에 맞는 항목만 추출 | 필터링 |
preg_quote() |
정규식에서 특수문자를 자동 이스케이프 | 동적 패턴 구성 시 |
1. preg_match()
첫 번째 일치 항목을 찾는 함수
$string = "PHP is great!";
if (preg_match("/PHP/", $string)) {
echo "✅ 패턴을 찾았습니다!";
}
- 결과: 1(매칭됨), 0(매칭 안 됨)
- 세 번째 매개변수로 일치 결과를 배열로 추출 가능
preg_match("/(PHP)/", $string, $matches);
print_r($matches); // $matches[0] = 전체 매칭, $matches[1] = 그룹
2. preg_match_all()
모든 일치 항목을 배열로 반환
$text = "Email: test@a.com, contact@b.co.kr";
preg_match_all("/[\w\.-]+@[\w\.-]+\.\w+/", $text, $emails);
print_r($emails[0]);
→ 이메일 모두 추출: Array ( [0] => test@a.com [1] => contact@b.co.kr )
3. preg_replace()
일치하는 부분을 다른 문자열로 치환
$content = "이건 비밀이야 바보 멍청이!";
echo preg_replace("/바보|멍청이/", "****", $content);
→ 이건 비밀이야 **** ****!
4. preg_replace_callback()
일치 항목을 콜백 함수로 처리해 동적으로 치환
$text = "상품 가격: 1000원, 배송비: 2500원";
echo preg_replace_callback("/\d+/", function($match) {
return $match[0] * 1.1;
}, $text);
→ 결과: 상품 가격: 1100원, 배송비: 2750원
5. preg_split()
정규식 기준으로 문자열을 배열로 나눔
$fruits = "사과, 배, 바나나/포도 수박";
$split = preg_split("/[,\s\/]+/", $fruits);
print_r($split);
→ Array ( [0] => 사과 [1] => 배 [2] => 바나나 [3] => 포도 [4] => 수박 )
6. preg_grep()
배열에서 정규식에 맞는 값만 필터링
$items = ["apple", "banana", "pear", "avocado"];
$filtered = preg_grep("/^a/", $items);
print_r($filtered);
→ Array ( [0] => apple [3] => avocado )
^a
는 ‘a’로 시작하는 문자열이라는 뜻이죠!
7. preg_quote()
정규식 특수문자를 자동 이스케이프해주는 함수
$keyword = "hello.world";
$pattern = "/".preg_quote($keyword, "/")."/";
echo $pattern; // → "/hello\.world/"
✅ 사용 예시: 사용자가 입력한 키워드를 기반으로 정규식을 만들 때 필수!
보너스: 정규식 플래그 사용하기
정규 표현식 끝에 붙여서 검색 방식에 영향을 주는 플래그도 있어요!
플래그 | 설명 |
---|---|
i |
대소문자 무시 (/php/i ) |
m |
멀티라인 지원 (^ , $ 가 줄마다 적용) |
s |
. 이 개행문자도 포함 |
u |
유니코드(한글 등) 처리 |
preg_match("/php/i", "I love PHP"); // true
실전 예제: HTML 태그 제거
$html = "<h1>제목입니다</h1><p>내용입니다</p>";
$plain = preg_replace("/<[^>]+>/", "", $html);
echo $plain; // 제목입니다내용입니다
실전 예제: 주민등록번호 마스킹
$ssn = "870101-1234567";
echo preg_replace("/(\d{6})-(\d{7})/", "$1-*******", $ssn);
→ 870101-*******
주의사항 정리
항목 | 주의사항 |
---|---|
\ 이스케이프 |
정규식 내부에서는 특수문자를 \\ 로 처리해야 할 수 있어요 |
멀티바이트 문자 | 한글 등 유니코드는 /u 플래그 필수 |
속도 | 너무 복잡한 정규식은 성능에 악영향 줄 수 있어요 |
결과 배열 구조 | preg_match_all() 의 결과는 2차 배열일 수 있어요 (반복문 활용 주의) |
마무리하며 😊
PHP의 정규 표현식 함수는 데이터 정제, 필터링, 치환, 파싱 등 모든 문자열 처리의 핵심 도구예요.
처음엔 어렵게 느껴질 수 있지만, 익숙해질수록 마치 문자열을 내 맘대로 조립하는 레고 블록처럼 느껴질 거예요 🧱
이제 정규 표현식과 PHP 함수들을 자유자재로 활용할 수 있게 되었으니,
로그 파서, 텍스트 필터, 사용자 입력 검증 등 실무에서도 멋지게 적용해보세요!
다음 시간에는 정규식 성능 최적화와 디버깅 팁도 알려드릴게요!
지금까지 잘 따라와 주셔서 감사합니다. 오늘도 뿌듯한 코딩 되세요! 💻✨