PHP에서 사용하는 주요 정규 표현식 함수는 다음과 같습니다:
함수 |
설명 |
---|---|
preg_match() |
패턴이 문자열에 일치하는지 확인 |
preg_match_all() |
모든 일치 항목 찾기 |
preg_replace() |
일치하는 문자열을 다른 문자열로 변경 |
preg_split() |
패턴을 기준으로 문자열 분할 |
preg_grep() |
배열에서 패턴과 일치하는 항목만 추출 |
정규 표현식은 /패턴/플래그 형식으로 사용합니다.
예: /hello/i
/: 구분자 (대부분 / 사용)
hello: 검색할 패턴
i: 대소문자 구분 없음 (플래그)
$pattern = "/php/i";
$str = "I love PHP!";
if (preg_match($pattern, $str)) {
echo "일치함";
} else {
echo "일치하지 않음";
}
패턴 |
의미 |
---|---|
. |
임의의 한 문자 |
\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` |
$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"]
$str = "010-1234-5678";
$pattern = "/(\d{3})-(\d{4})-(\d{4})/";
$replacement = "$1 **** $3";
echo preg_replace($pattern, $replacement, $str);
// 출력: 010 **** 5678
$str = "apple,banana orange;grape";
$pattern = "/[\s,;]+/";
$fruits = preg_split($pattern, $str);
print_r($fruits);
// 결과: ["apple", "banana", "orange", "grape"]
플래그 |
설명 |
---|---|
i |
대소문자 구분 없음 |
m |
여러 줄 모드 (줄마다 ^, $ 적용) |
s |
줄바꿈 문자를 포함하여 .이 모든 문자와 일치 |
u |
유니코드 지원 (UTF-8 문자열 처리 시 필수) |
x |
공백과 주석 무시 (가독성 향상용) |
$email = "user@example.com";
$pattern = "/^[\w\.-]+@[\w\.-]+\.\w+$/";
if (preg_match($pattern, $email)) {
echo "유효한 이메일";
} else {
echo "유효하지 않음";
}
UTF-8 문자열을 다룰 경우, 반드시 u 플래그를 사용해야 정확한 문자 인식을 할 수 있습니다.
$str = "안녕하세요";
$pattern = "/^안녕/u";
if (preg_match($pattern, $str)) {
echo "일치함";
}
정규표현식 구분자(/) 대신 #, ~ 등도 사용 가능하며, 구분자 충돌 방지를 위해 사용됨.
패턴 내에서 백슬래시(\)는 PHP 코드에서는 이중(\\)으로 써야 함.
복잡한 패턴은 테스트 사이트(예: regex101.com)에서 실시간 확인 가능.
PHP의 정규 표현식은 문자열의 유효성 검사, 파싱, 치환, 추출에 매우 유용합니다. preg_* 함수와 PCRE 문법을 정확히 익히면 웹 개발에서 사용자 입력 검증이나 로그 분석 등의 작업을 강력하게 처리할 수 있습니다.