문제: 정규표현식에 구분자를 빼먹어서 발생하는 오류
// 잘못된 예
if (preg_match('hello', $text)) {
// Warning: preg_match(): No ending delimiter
}
// 올바른 예
if (preg_match('/hello/', $text)) {
echo "매치됨!";
}
문제: 정규표현식에서 특수 의미를 가진 문자를 리터럴로 사용할 때
// 잘못된 예 - 점(.)은 모든 문자를 의미
preg_match('/example.com/', $email);
// 올바른 예 - 리터럴 점으로 이스케이프
preg_match('/example\.com/', $email);
문제: 대소문자 구분이나 멀티라인 처리를 제대로 하지 않는 경우
// 대소문자 무시
preg_match('/HELLO/i', 'hello world'); // true
// 멀티라인 모드
preg_match('/^start/m', "line1\nstart of line2"); // true
문제: 예상보다 많은 문자를 매칭하는 경우
$html = '<div>content1</div><div>content2</div>';
// 잘못된 예 - 탐욕적 매칭
preg_match('/<div>.*<\/div>/', $html, $matches);
// 전체 문자열을 매칭
// 올바른 예 - 비탐욕적 매칭
preg_match('/<div>.*?<\/div>/', $html, $matches);
// 첫 번째 div만 매칭
문제: PHP 문자열과 정규표현식의 이중 이스케이프
// 잘못된 예
preg_match('/\d+/', $number); // 작동하지 않을 수 있음
// 올바른 예
preg_match('/\\d+/', $number);
// 또는 raw string 사용
preg_match('/\d+/', $number);
문제: preg_match 함수의 반환값을 제대로 확인하지 않는 경우
// 올바른 확인 방법
$result = preg_match('/pattern/', $text, $matches);
if ($result === false) {
// 정규표현식 오류
echo "정규표현식 오류 발생";
} elseif ($result === 1) {
// 매칭 성공
echo "매칭됨: " . $matches[0];
} else {
// 매칭 실패
echo "매칭되지 않음";
}
문제: 문자 클래스를 잘못 정의하는 경우
// 잘못된 예
preg_match('/[0-9-a-z]/', $text); // 하이픈 위치 문제
// 올바른 예
preg_match('/[0-9a-z-]/', $text); // 하이픈을 끝에
preg_match('/[0-9\-a-z]/', $text); // 또는 이스케이프
문제: 한글이나 특수문자 처리 시 인코딩 문제
// UTF-8 플래그 사용
preg_match('/[가-힣]+/u', $korean_text, $matches);
// 또는 mb_ereg 함수 사용
mb_ereg('[가-힣]+', $korean_text, $matches);