PHP preg_match(): 정규식(Regex)

⚡ 스마트 요약

PHP의 정규 표현식은 단일 표현식으로 텍스트의 유효성 검사, 분할 및 바꾸기를 수행하는 패턴 매칭 도구입니다. 이 가이드에서는 핵심 함수인 `preg_match`, `preg_split`, `preg_replace`를 살펴보고, 일반적인 메타 문자를 설명하며, 이메일 유효성 검사 패턴을 단계별로 구축하는 방법을 보여줍니다.

  • 🧩 정규 표현식이란 무엇인가: 정규 표현식은 텍스트를 설명하는 패턴으로, 이를 통해 하나의 함수로 문자열의 유효성을 검사, 검색 또는 변환할 수 있습니다.
  • 임신 일치: `preg_match` 함수는 문자열에 패턴이 나타나는지 여부를 테스트하고 첫 번째 일치 시 `true`를 반환하므로 유효성 검사에 적합합니다.
  • ✂️ 임신 분할: preg_split은 공백을 기준으로 문장을 분할하는 등, 패턴이 나타나는 모든 위치에서 문자열을 배열로 분할합니다.
  • 🔁 preg_replace: `preg_replace` 함수는 패턴과 일치하는 모든 부분을 찾아 새 텍스트로 대체합니다. 템플릿 작성 및 강조 표시 작업에 유용합니다.
  • 🔤 메타문자: ., ^, $, *, +와 같은 기호는 시작이나 끝에 일치 항목을 고정하는 것과 같은 복잡한 패턴을 만들 수 있습니다.
  • 📧 이메일 패턴: 문자 분류와 수량자는 하나의 패턴으로 결합되어 이메일 주소의 형식이 올바른지 확인합니다.
  • 🤖 AI 지원: AI 도구는 일반적인 설명에서 정규 표현식을 작성하고 복잡한 기존 패턴을 설명하거나 디버깅할 수 있습니다.

PHP 정규 표현식

PHP에서 정규 표현식이란 무엇인가요?

PHP 정규 표현식정규 표현식(regex)은 단일 표현식으로 수행할 수 있는 강력한 패턴 일치 도구입니다. 정규 표현식은 +, -, ^와 같은 특수 문자를 사용하여 복잡한 표현식을 만들 수 있습니다. 이메일 주소, IP 주소 등의 유효성 검사와 같은 작업을 수행하는 데 도움이 될 수 있습니다.

정규식을 사용하는 이유

  • PHP 정규 표현식은 단일 함수 호출을 통해 문자열 데이터에서 패턴을 식별하는 작업을 간소화합니다. 덕분에 코딩 시간을 절약할 수 있습니다.
  • 이메일 주소, 도메인 이름, 전화번호, IP 주소와 같은 사용자 입력을 검증할 때
  • 검색 결과에서 키워드 강조 표시
  • 사용자 정의 HTML 템플릿을 생성할 때. PHP의 Regex를 사용하여 템플릿 태그를 식별하고 이를 실제 데이터로 바꿀 수 있습니다.

PHP에 내장된 정규식 함수

PHP에는 정규 표현식을 다룰 수 있는 내장 함수들이 있으며, 이 튜토리얼에서 이러한 함수들을 배우겠습니다. PHP에서 자주 사용되는 정규 표현식 함수들을 살펴보겠습니다.

  • PHP의 `preg_match()` 함수는 문자열에서 패턴 매칭을 수행하는 데 사용됩니다. 일치하는 항목이 있으면 `true`를, 없으면 `false`를 반환합니다.
  • PHP의 `preg_split()` 함수는 문자열에서 패턴 매칭을 수행한 후 결과를 숫자 배열로 분할하는 데 사용됩니다.
  • PHP의 preg_replace() – 이 함수는 문자열에서 패턴 일치를 수행한 다음 일치 항목을 지정된 텍스트로 바꾸는 데 사용됩니다.

다음은 preg_match(), preg_split(), preg_replace()와 같은 정규 표현식 함수의 구문입니다.

<?php
function_name('/pattern/',subject);
?>

이리,

  • “function_name(…)”은 preg_match(), preg_split() 또는 preg_replace() 중 하나입니다.
  • “/…/”에서 슬래시는 정규 표현식의 시작과 끝을 나타냅니다.
  • "/pattern/"은 우리가 일치시켜야 하는 패턴입니다.
  • "subject"는 일치시킬 텍스트 문자열입니다.

이제 위에서 설명한 PHP 정규 표현식 함수를 구현하는 실제 예제를 살펴보겠습니다.

PHP의 Preg_match()

첫 번째 예제는 preg_match() 함수를 사용하여 주어진 텍스트에서 "guru"라는 단어를 찾는 간단한 패턴 매칭을 수행합니다. URL.

아래 코드는 위 예제에 대한 preg_match() 함수의 구현을 보여줍니다.

<?php
$my_url = "www.guru99.com";
if (preg_match("/guru/", $my_url))
{
echo "the url $my_url contains guru";
}
else
{
echo "the url $my_url does not contain guru";
}
?>

찾아보기 URL http://localhost/phptuts/preg_match_simple.php

내장 정규식 함수

이제 우리가 보고 있는 결과물을 만들어내는 코드 부분을 살펴보겠습니다. preg_match('/guru/', $my_url). 여기,

  • "preg_match(...)"는 PHP 정규식 함수입니다.
  • "'/guru/'"는 일치시킬 정규식 패턴입니다.
  • "$my_url"은 일치시킬 텍스트가 포함된 변수입니다.

PHP Preg_split()

이제 preg_split() 함수를 사용하는 또 다른 예제를 살펴보겠습니다.

문자열 문구를 가져와서 배열로 분해하겠습니다. 일치시킬 패턴은 단일 공백입니다.

이 예에서 사용되는 텍스트 문자열은 "I Love Regular Expressions"입니다.

아래 코드는 위 예제의 구현을 보여줍니다.

<?php

$my_text = "I Love Regular Expressions";

$my_array = preg_split("/ /", $my_text);

print_r($my_array );

?>

찾아보기 URL http://localhost/phptuts/preg_split.php

PHP Preg_split()

PHP Preg_replace()

이제 preg_replace() 함수를 살펴보겠습니다. PHP 기능 패턴 일치를 수행한 다음 패턴을 다른 것으로 바꾸는 것입니다.

아래 코드는 guru라는 단어를 검색합니다. .

이 코드는 'guru'라는 단어를 배경색을 강조하는 CSS 코드로 둘러싸는 것으로 대체합니다.

<?php

$text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com";

$text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text);

echo $text;

?>

preg_replace.php 파일을 저장했다고 가정하고, 해당 파일로 이동하세요. URL http://localhost/phptuts/preg_replace.php

PHP Preg_replace()

정규식 메타 문자

위 예시에서는 매우 기본적인 패턴을 사용했습니다. 메타문자를 사용하면 이메일 주소의 유효성 검사와 같이 더 복잡한 패턴 일치 작업을 수행할 수 있습니다. 이제 일반적으로 사용되는 메타문자를 살펴보겠습니다.

메타 문자 기술설명 예시
. 새 줄을 제외한 모든 단일 문자와 일치합니다. /./는 단일 문자가 있는 모든 항목과 일치합니다.
^ 문자열의 시작 부분과 일치하거나 특정 문자를 제외합니다. /^PH/는 PH로 시작하는 모든 문자열과 일치합니다.
$ 문자열 끝부분의 패턴과 일치합니다. /com$/는 guru99.com, yahoo.com 등과 일치합니다.
* 앞의 문자 중 0개 이상과 일치합니다. /com*/은 컴퓨터, 통신 등과 일치합니다.
+ 앞의 문자가 최소 한 번 이상 나타나야 합니다. /yah+oo/는 야후와 일치합니다.
\ 메타문자를 이스케이프하는 데 사용됩니다. /yahoo+\.com/은 점을 리터럴 값으로 처리합니다.
[...] 캐릭터 클래스 /[abc]/는 a, b 또는 c와 일치합니다.
AZ 소문자와 일치합니다. /az/는 Cool, Happy 등과 일치합니다.
AZ 대문자와 일치합니다. /AZ/는 무엇, 어떻게, 왜 등과 일치합니다.
0-9 0에서 9 사이의 숫자와 일치합니다. /0-4/는 0,1,2,3,4와 일치합니다.

위 목록은 정규식에서 가장 일반적으로 사용되는 메타 문자만 제공합니다.

이제 이메일 주소의 유효성을 확인하는 다소 복잡한 예제를 살펴보겠습니다.

<?php
$my_email = "name@company.com";
if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/", $my_email)) {
echo "$my_email is a valid email address";
}
else
{
echo "$my_email is NOT a valid email address";
}
?>

이메일 유효성 검사 패턴 설명

이리,

  • “/…/”는 정규 표현식의 시작과 끝을 나타냅니다.
  • “^[a-zA-Z0-9._-]”는 소문자 또는 대문자, 0에서 9 사이의 숫자, 마침표, 밑줄 또는 하이픈과 일치합니다.
  • “+@[a-zA-Z0-9-]”는 @ 기호 뒤에 소문자 또는 대문자, 0에서 9 사이의 숫자, 또는 하이픈이 오는 것과 일치합니다.
  • “+\.[a-zA-Z.]{2,5}$/”는 백슬래시를 사용하여 점을 이스케이프한 다음 문자열 끝에서 문자 길이가 2~5 사이인 소문자 또는 대문자와 일치합니다.

찾아보기 URL http://localhost/phptuts/preg_match.php

PHP 이메일 유효성 검사 패턴

위의 분석에서 볼 수 있듯이, 메타 문자는 패턴을 찾는 데 매우 강력한 도구입니다.

자주 묻는 질문

`preg_match`는 첫 번째 일치 항목에서 멈추고 해당 결과 하나만을 `$matches`에 채웁니다. `preg_match_all`은 문자열의 모든 일치 항목을 찾아 중첩 배열에 모두 반환합니다. 이는 예시에 적합합니다.trac반복되는 항목을 팅.

수정자는 닫는 구분 기호 뒤에 붙으며 일치 동작을 변경합니다. i 수정자는 패턴을 대소문자 구분 없이 처리하고, m 수정자는 ^와 $ 기호를 각각 다른 줄에 대해 처리하며, s 수정자는 점(.)을 줄 바꿈 문자와 일치시킵니다(예: /guru/i).

패턴의 일부를 괄호로 묶어 캡처 그룹을 만듭니다. preg_match 이후에는 전체 일치 항목이 $matches[0]에 있고 각 그룹은 $matches[1], $matches[2] 등에 이어집니다.

네. 전화번호나 날짜 형식처럼 일치시키고자 하는 텍스트를 설명하면 AI가 해당 패턴과 preg_match 예시를 생성해 줍니다. 결과를 신뢰하기 전에 실제 입력값과 예외적인 경우를 포함하여 테스트해 보세요.

네. 패턴을 붙여넣으면 AI가 토큰 단위로 분석하고, 각 부분이 무엇에 해당하는지 설명하며, 특정 입력에서 오류가 발생하는 이유를 지적한 다음 수정된 버전을 제안합니다.

이 게시물을 요약하면 다음과 같습니다.