PHP 정규표현식 오류

프리터코더·2025년 6월 2일
0

php 문제 해결

목록 보기
57/79

1. 구분자(Delimiter) 누락

문제: 정규표현식에 구분자를 빼먹어서 발생하는 오류

// 잘못된 예
if (preg_match('hello', $text)) {
    // Warning: preg_match(): No ending delimiter
}

// 올바른 예
if (preg_match('/hello/', $text)) {
    echo "매치됨!";
}

2. 특수문자 이스케이프 누락

문제: 정규표현식에서 특수 의미를 가진 문자를 리터럴로 사용할 때

// 잘못된 예 - 점(.)은 모든 문자를 의미
preg_match('/example.com/', $email);

// 올바른 예 - 리터럴 점으로 이스케이프
preg_match('/example\.com/', $email);

3. 잘못된 플래그 사용

문제: 대소문자 구분이나 멀티라인 처리를 제대로 하지 않는 경우

// 대소문자 무시
preg_match('/HELLO/i', 'hello world'); // true

// 멀티라인 모드
preg_match('/^start/m', "line1\nstart of line2"); // true

4. 탐욕적 매칭 문제

문제: 예상보다 많은 문자를 매칭하는 경우

$html = '<div>content1</div><div>content2</div>';

// 잘못된 예 - 탐욕적 매칭
preg_match('/<div>.*<\/div>/', $html, $matches);
// 전체 문자열을 매칭

// 올바른 예 - 비탐욕적 매칭
preg_match('/<div>.*?<\/div>/', $html, $matches);
// 첫 번째 div만 매칭

5. 백슬래시 이스케이프 문제

문제: PHP 문자열과 정규표현식의 이중 이스케이프

// 잘못된 예
preg_match('/\d+/', $number); // 작동하지 않을 수 있음

// 올바른 예
preg_match('/\\d+/', $number);
// 또는 raw string 사용
preg_match('/\d+/', $number);

6. 반환값 확인 누락

문제: preg_match 함수의 반환값을 제대로 확인하지 않는 경우

// 올바른 확인 방법
$result = preg_match('/pattern/', $text, $matches);

if ($result === false) {
    // 정규표현식 오류
    echo "정규표현식 오류 발생";
} elseif ($result === 1) {
    // 매칭 성공
    echo "매칭됨: " . $matches[0];
} else {
    // 매칭 실패
    echo "매칭되지 않음";
}

7. 잘못된 문자 클래스 사용

문제: 문자 클래스를 잘못 정의하는 경우

// 잘못된 예
preg_match('/[0-9-a-z]/', $text); // 하이픈 위치 문제

// 올바른 예
preg_match('/[0-9a-z-]/', $text); // 하이픈을 끝에
preg_match('/[0-9\-a-z]/', $text); // 또는 이스케이프

8. UTF-8 인코딩 문제

문제: 한글이나 특수문자 처리 시 인코딩 문제

// UTF-8 플래그 사용
preg_match('/[가-힣]+/u', $korean_text, $matches);

// 또는 mb_ereg 함수 사용
mb_ereg('[가-힣]+', $korean_text, $matches);
profile
일용직 개발자. freetercoder@gmail.com

0개의 댓글