PHP에서 문자열을 다룰 때, 특정 패턴을 찾아 다른 문자열로 치환(Replace) 해야 하는 경우가 많습니다.
예를 들어, HTML 태그 제거, 공백 제거, 특정 단어 필터링, 정규식 기반 문자열 변환 등에 사용됩니다.
이러한 기능을 수행하는 대표적인 함수가 바로 preg_replace() 입니다.
이 글에서는 PHP preg_replace() 함수의 사용법, 다양한 활용 예제, str_replace()와의 차이점, 유용한 팁과 주의사항을 체계적으로 정리하겠습니다.
1. preg_replace() 함수란?
✅ 기본 문법
mixed preg_replace(array|string $pattern, array|string $replacement, array|string $subject, int $limit = -1, int &$count = null)
✅ 매개변수 설명
매개변수 설명
$pattern | 정규 표현식 (배열도 가능) |
$replacement | 대체할 문자열 (배열도 가능) |
$subject | 변환할 대상 문자열 또는 배열 |
$limit (선택) | 치환 횟수 제한 (기본값 -1, 즉 무제한) |
$count (선택) | 변경된 횟수를 저장할 변수 |
✅ 반환값
- 치환된 문자열 또는 배열 반환
- 실패 시 null 반환
2. preg_replace() 기본 예제
🔹 특정 단어 치환
<?php
$text = "Hello, PHP is awesome!";
$newText = preg_replace("/PHP/", "JavaScript", $text);
echo $newText;
?>
🔹 실행 결과
Hello, JavaScript is awesome!
➡ "PHP"가 "JavaScript"로 변경됨.
🔹 여러 단어 동시에 치환
<?php
$text = "I love PHP and JavaScript.";
$newText = preg_replace(["/PHP/", "/JavaScript/"], ["Python", "TypeScript"], $text);
echo $newText;
?>
🔹 실행 결과
I love Python and TypeScript.
➡ 배열을 사용하여 여러 단어를 동시에 치환 가능.
🔹 특정 패턴 제거 (공백 제거)
<?php
$text = " Hello PHP ";
$cleanText = preg_replace("/\s+/", " ", $text);
echo $cleanText;
?>
🔹 실행 결과
Hello PHP
➡ 연속된 공백이 하나의 공백으로 변환됨.
3. preg_replace()의 실용적인 활용 예제
🔹 1) HTML 태그 제거 (strip_tags() 대체)
<?php
$html = "<p>Hello, <b>PHP</b>!</p>";
$text = preg_replace("/<[^>]+>/", "", $html);
echo $text;
?>
🔹 실행 결과
Hello, PHP!
➡ HTML 태그 제거 가능 (strip_tags()보다 유연함).
🔹 2) 숫자만 추출
<?php
$text = "Order ID: #12345";
$numbers = preg_replace("/\D/", "", $text);
echo $numbers;
?>
🔹 실행 결과
12345
➡ 숫자가 아닌 문자(\D = [^0-9])가 제거됨.
🔹 3) 이메일 주소 마스킹
<?php
$email = "user@example.com";
$maskedEmail = preg_replace("/(.{2}).+(@.+)/", "$1****$2", $email);
echo $maskedEmail;
?>
🔹 실행 결과
us****@example.com
➡ 이메일의 일부를 ****로 마스킹.
🔹 4) 전화번호 형식 변환
<?php
$phone = "01012345678";
$formattedPhone = preg_replace("/(\d{3})(\d{4})(\d{4})/", "$1-$2-$3", $phone);
echo $formattedPhone;
?>
🔹 실행 결과
010-1234-5678
➡ 정규식을 사용하여 전화번호를 자동으로 포맷팅.
🔹 5) URL에서 프로토콜 제거
https://example.com";
$cleanUrl = preg_replace("/https?:\/\//", "", $url);
echo $cleanUrl;
?>
🔹 실행 결과
example.com
➡ http:// 또는 https:// 제거 가능.
4. preg_replace() vs str_replace() 차이점
함수 설명
preg_replace() | 정규 표현식을 사용하여 문자열 치환 |
str_replace() | 단순 문자열 치환 (정규식 미지원) |
✅ 예제: preg_replace() vs str_replace()
<?php
$text = "Order ID: #12345";
echo str_replace("#", "", $text); // Order ID: 12345
echo preg_replace("/\D/", "", $text); // 12345
?>
➡ str_replace()는 단순 문자 변경, preg_replace()는 정규식을 활용 가능.
5. preg_replace() 사용 시 주의할 점
✅ 정규식 구문 오류 (preg_last_error())
<?php
$text = "Hello, PHP!";
$result = preg_replace("/(PHP/", "JavaScript", $text); // 정규식 오류 발생
if ($result === null) {
echo "오류 발생: " . preg_last_error();
}
?>
➡ 정규식이 올바르지 않으면 null 반환.
➡ preg_last_error()로 오류 확인 가능.
✅ 대소문자 구분 (/i 플래그 사용)
<?php
$text = "Hello, php!";
echo preg_replace("/php/i", "JavaScript", $text);
?>
🔹 실행 결과
Hello, JavaScript!
➡ /i 플래그를 사용하면 대소문자를 구분하지 않음.
✅ 배열을 변환할 경우 array_map()과 함께 사용 가능
<?php
$sentences = ["Hello, PHP!", "PHP is great.", "I love PHP!"];
$modified = array_map(fn($s) => preg_replace("/PHP/", "JavaScript", $s), $sentences);
print_r($modified);
?>
➡ 배열 내 모든 요소에 preg_replace() 적용 가능.
6. preg_replace() 활용 팁
✅ URL에서 도메인 추출
https://www.example.com/path?query=1";
$domain = preg_replace("/https?:\/\/(www\.)?/", "", $url);
echo $domain; // example.com/path?query=1
?>
✅ 비속어 필터링
<?php
$text = "This is a damn good PHP tutorial!";
$filteredText = preg_replace("/damn/i", "****", $text);
echo $filteredText;
?>
✅ 문자열에서 특수문자 제거
<?php
$text = "Hello!@# World$%^";
$cleanText = preg_replace("/[^a-zA-Z0-9 ]/", "", $text);
echo $cleanText; // Hello World
?>
7. 결론
PHP의 preg_replace() 함수는 정규 표현식을 사용하여 문자열을 치환하는 강력한 함수입니다.
이를 활용하면 HTML 태그 제거, 공백 정리, URL 변환, 비속어 필터링, 데이터 정리 등 다양한 작업을 효율적으로 수행할 수 있습니다.
📌 핵심 요약
✔️ preg_replace()는 정규식을 사용하여 문자열을 변환
✔️ str_replace()보다 강력한 치환 기능 제공
✔️ 대소문자 구분 없이 검색하려면 /i 플래그 사용
✔️ 정규식 오류 발생 시 preg_last_error()로 확인 가능
이제 preg_replace()를 활용하여 더욱 정밀한 PHP 문자열 처리를 해보세요!
'💻 자주 쓰는 PHP 함수' 카테고리의 다른 글
[PHP 함수] strtotime() 함수로 날짜를 타임스탬프로 변환 (14) | 2025.03.29 |
---|---|
[PHP 함수] time() 함수 사용하기 (14) | 2025.03.28 |
[PHP 함수] strtolower() 함수 - 문자열 소문자 변환 (14) | 2025.03.28 |
[PHP 함수] json_encode() 함수로 json으로 변환하기 (26) | 2025.03.27 |
[PHP 함수] json_decode() 함수로 Json을 배열로 변환 (6) | 2025.03.27 |