IMG-LOGO
공지사항 :

PHP 정규 표현식(Regular Expression, RegExp)

lmkfox - 2025-08-08 06:42:46 11 Views 0 Comment

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 문법을 정확히 익히면 웹 개발에서 사용자 입력 검증이나 로그 분석 등의 작업을 강력하게 처리할 수 있습니다.


댓글