PHP - 정규 표현식: 초보자 가이드

안녕하세요, 미래의 PHP 마법사 여러분! 오늘 우리는 PHP에서의 정규 표현식의 fascinatings한 세상으로 뛰어들어 볼 거예요. 걱정 마세요, 이전에 코드를 작성해 본 적이 없어도 괜찮아요 - 이 흥미로운 여정에서 여러분의 친절한 안내자가 되겠습니다. 시작해 볼까요!

PHP - Regular Expression

정규 표현식이란?

PHP에 특화된 내용에 이전에 이르기 전에, 정규 표현식(regex)이 무엇인지 이해해 보겠습니다. 상상해 보세요, 텍스트의 바다에서 특정 패턴을 찾는 탐정이 된다면. 그게 바로 regex가 하는 일입니다 - 패턴을 기반으로 텍스트를 검색하고, 일치시키고, 조작하는 데 도움을 줍니다. 멋지지 않나요?

POSIX 정규 표현식

POSIX (Portable Operating System Interface) 정규 표현식은 PHP에서 regex의 원래 표준이었습니다. 지금은 그다지 흔히 사용되지 않지만, 이를 이해하면 견고한 기반을 마련할 수 있습니다.

기본 POSIX Regex 예제

간단한 예제를 시작해 보겠습니다:

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (ereg($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

이 예제에서 우리는 문장에서 "quick"라는 단어를 검색하고 있습니다. ereg() 함수는 패턴이 텍스트 어디에나 일치하는지 확인합니다.

PHP의 Regexp POSIX 함수

PHP는 여러 가지 POSIX regex 함수를 제공합니다. 가장 흔히 사용되는 함수들을 표로 정리해 보겠습니다:

함수 설명
ereg() 정규 표현식 일치
eregi() 대소문자를 구분하지 않는 정규 표현식 일치
ereg_replace() 정규 표현식 치환
split() 정규 표현식을 기준으로 문자열을 배열로 나누기

예제: eregi()를 사용한 대소문자 구분하지 않는 일치

$text = "The Quick Brown Fox";
$pattern = "quick";
if (eregi($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

이번에는 "Quick"가 대문자로 되어 있어도 일치를 찾을 수 있습니다.

PERL 스타일 정규 표현식

이제 더 현대적이고 강력한 PERL 호환 정규 표현식(PCRE)에 대해 이야기해 보겠습니다. 이 것들이 PHP 프로젝트에서 가장 자주 사용할 것입니다.

기본 PCRE 예제

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (preg_match($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

이 예제는 POSIX 예제와 비슷해 보이지만, preg_match()를 사용하고 있습니다.

PHP의 Regexp PERL 호환 함수

PCRE 함수는 더 다양하고 효율적입니다. 흔히 사용되는 PCRE 함수들을 표로 정리해 보겠습니다:

함수 설명
preg_match() 정규 표현식 일치 수행
preg_match_all() 전역 정규 표현식 일치 수행
preg_replace() 정규 표현식 검색 및 치환 수행
preg_split() 정규 표현식을 기준으로 문자열 나누기

예제: preg_match_all()를 사용한 모든 일치 찾기

$text = "The quick brown fox jumps over the quick lazy dog.";
$pattern = "/quick/";
if (preg_match_all($pattern, $text, $matches)) {
echo "Found " . count($matches[0]) . " matches!";
print_r($matches);
} else {
echo "No matches found.";
}

이 스크립트는 텍스트에서 "quick"의 모든 발생을 찾아 배열에 저장합니다.

고급 PCRE 기술

기본적인 내용을 다루고 나서, 더 고급 기술을 살펴보겠습니다.

메타 문자

메타 문자는 정규 표현식에서 특정 의미를 가지는 특수 문자입니다. 다음은 일반적인 메타 문자들입니다:

  • . : 줄 바꿈을 제외한 모든 단일 문자 일치
  • ^ : 문자열의 시작 일치
  • $ : 문자열의 끝 일치
  • * : 제로 이상의 발생 횟수
  • + : 하나 이상의 발생 횟수
  • ? : 제로 또는 하나의 발생 횟수

예제: 메타 문자 사용

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/^The/";
if (preg_match($pattern, $text)) {
echo "The text starts with 'The'";
} else {
echo "The text does not start with 'The'";
}

이 스크립트는 텍스트가 "The"로 시작하는지 확인합니다.

문자 클래스

문자 클래스는 특정 문자 그룹 중 하나를 일치시키기 위해 사용됩니다. 이는 꺽쇠 []로 둘러싸여 있습니다.

예제: 문자 클래스 사용

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/[aeiou]/i";
if (preg_match_all($pattern, $text, $matches)) {
echo "Found " . count($matches[0]) . " vowels!";
print_r($matches);
} else {
echo "No vowels found.";
}

이 스크립트는 텍스트에서 모든 모음을 찾습니다. 패턴의 끝에 i를 추가하여 대소문자를 구분하지 않도록 합니다.

실용적인 응용

기본적인 내용과 고급 기술을 다루고 나서, 실제 세계에서의 응용을 살펴보겠습니다.

이메일 주소 검증

$email = "[email protected]";
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo "Valid email address!";
} else {
echo "Invalid email address!";
}

이 스크립트는 복잡한 정규 표현식 패턴을 사용하여 이메일 주소를 검증합니다. 이는 다음을 확인합니다:

  • @ 앞에 하나 이상의 문자, 숫자, 점, 밑줄, 퍼센트 기호, 플러스 기호 또는 하이픈
  • @ 뒤에 하나 이상의 문자, 숫자, 점 또는 하이픈
  • 마지막에 점 뒤에 두 개 이상의 문자

결론

축하합니다! 지금 PHP에서 정규 표현식의 세계로 첫 걸음을 내디디셨습니다. 기억해 두세요, regex는 강력한 도구이지만, 복잡할 수도 있습니다. 중요한 것은 연습입니다 - 자주 사용할수록 더 편안해질 것입니다.

PHP 여정을 계속하면서, 양식 검증, 데이터 파싱, 텍스트 조작 등의 작업에서 regex가 매우 유용하게 사용될 것을 발견할 것입니다. 계속 탐구하고, 계속 코딩하고, 가장 중요한 것은 즐겁게 하세요!

Credits: Image by storyset