IT
PHP 정규 표현식(Regular Expression, RegExp)
1. 정규 표현식 함수 개요
PHP에서 사용하는 주요 정규 표현식 함수는 다음과 같습니다:
함수
설명
preg_match()
패턴이 문자열에 일치하는지 확인
preg_match_all()
모든 일치 항목 찾기
preg_replace()
일치하는 문자열을 다른 문자열로 변경
preg_split()
패턴을 기준으로 문자열 분할
preg_grep()
배열에서 패턴과 일치하는 항목만 추출
2. 패턴 기본 구조
정규 표현식은 /패턴/플래그 형식으로 사용합니다.
예: /hello/i
-
/: 구분자 (대부분 / 사용)
-
hello: 검색할 패턴
-
i: 대소문자 구분 없음 (플래그)
3. preg_match()
사용법
$pattern = "/php/i";
$str = "I love PHP!";
if (preg_match($pattern, $str)) {
echo "일치함";
} else {
echo "일치하지 않음";
}
4. 자주 쓰는 정규식 문법
문자 클래스
패턴
의미
.
임의의 한 문자
\d
숫자 ([0-9])
\D
숫자가 아님 ([^0-9])
\w
단어 문자 ([a-zA-Z0-9_])
\W
단어 문자가 아님
\s
공백 문자 (스페이스, 탭, 개행 등)
\S
공백 문자가 아님
수량자
패턴
의미
*
0회 이상 반복
+
1회 이상 반복
?
0 또는 1회 반복
{n}
n회 반복
{n,}
n회 이상 반복
{n,m}
n~m회 반복
예:
preg_match("/a{2,4}/", "aaab"); // a가 2~4회 반복되는지 확인
그룹화 및 선택
패턴
의미
(...)
그룹
(?:...)
캡처하지 않는 그룹
`a
b`
5. preg_match_all()
예제
$str = "Email: john@example.com, jane@domain.net";
$pattern = "/[\w\.-]+@[\w\.-]+\.\w+/";
preg_match_all($pattern, $str, $matches);
print_r($matches[0]);
// 결과: ["john@example.com", "jane@domain.net"]
6.
preg_replace()
예제
$str = "010-1234-5678";
$pattern = "/(\d{3})-(\d{4})-(\d{4})/";
$replacement = "$1 **** $3";
echo preg_replace($pattern, $replacement, $str);
// 출력: 010 **** 5678
7.
preg_split()
예제
$str = "apple,banana orange;grape";
$pattern = "/[\s,;]+/";
$fruits = preg_split($pattern, $str);
print_r($fruits);
// 결과: ["apple", "banana", "orange", "grape"]
8. 플래그(옵션)
플래그
설명
i
대소문자 구분 없음
m
여러 줄 모드 (줄마다 ^, $ 적용)
s
줄바꿈 문자를 포함하여 .이 모든 문자와 일치
u
유니코드 지원 (UTF-8 문자열 처리 시 필수)
x
공백과 주석 무시 (가독성 향상용)
9. 실제 예제: 이메일 유효성 검사
$email = "user@example.com";
$pattern = "/^[\w\.-]+@[\w\.-]+\.\w+$/";
if (preg_match($pattern, $email)) {
echo "유효한 이메일";
} else {
echo "유효하지 않음";
}
10. 멀티바이트 문자열과 정규표현식
UTF-8 문자열을 다룰 경우, 반드시 u 플래그를 사용해야 정확한 문자 인식을 할 수 있습니다.
$str = "안녕하세요";
$pattern = "/^안녕/u";
if (preg_match($pattern, $str)) {
echo "일치함";
}
11. 유의사항
-
정규표현식 구분자(/) 대신 #, ~ 등도 사용 가능하며, 구분자 충돌 방지를 위해 사용됨.
-
패턴 내에서 백슬래시(\)는 PHP 코드에서는 이중(\\)으로 써야 함.
-
복잡한 패턴은 테스트 사이트(예: regex101.com)에서 실시간 확인 가능.
결론
PHP의 정규 표현식은 문자열의 유효성 검사, 파싱, 치환, 추출에 매우 유용합니다. preg_* 함수와 PCRE 문법을 정확히 익히면 웹 개발에서 사용자 입력 검증이나 로그 분석 등의 작업을 강력하게 처리할 수 있습니다.
댓글
아직 댓글이 없습니다.
로그인 후 댓글을 남길 수 있습니다.