preg_match()
함수의 사용법
preg_match()
함수는
주어진 정규 표현식 패턴을 사용하여 문자열 내에서 일치(match)하는 부분을 찾아내는 함수입니다.
- 일치하는 패턴을 문자열에서 처음으로 발견되면 검색을 중단하고
1
을 반환하고, - 일치하는 패턴을 찾지 못하면
0
을 반환합니다. - 에러가 발생한 경우
false
를 반환합니다. - 이메일 주소, 전화번호, URL과 같은 특정 패턴의 문자열을 검사할 때 주로 사용되며,
- 문자열에서 특정 패턴을 검색하거나 문자열에서 특정 형식의 데이터를 추출하는 데에도 사용됩니다.
$email = "codingeverybody@example.com";
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo '이메일 주소가 올바른 형식입니다.';
} else {
echo '이메일 주소가 올바른 형식이 아닙니다.';
}
// 출력: '이메일 주소가 올바른 형식입니다.'
문자열 내에서 정규 표현식을 사용하여 특정 패턴을 찾아 다른 문자열로 바꾸려면 preg_replace()
함수를 사용하세요.
preg_match()
함수의 형식은 다음과 같습니다.
구문
preg_match(
string $pattern,
string $subject,
array &$matches = null,
int $flags = 0,
int $offset = 0
): int|false
/* preg_match(
정규식 패턴,
검색 대상이 되는 문자열,
일치하는 부분을 저장할 배열[,
추가적인 설정을 지정하는 플래그[,
검색을 시작할 문자열 내의 오프셋]]
);
*/
매개변수
$pattern |
필수. 검색할 정규 표현식 패턴입니다. |
---|---|
$subject |
필수. 검색 대상이 되는 문자열입니다. |
$matches |
필수. 정규 표현식 패턴에 일치하는 결과를 저장할 배열입니다.
이 배열은 함수 호출 후에 채워집니다. 참조 변수입니다.
|
$flags |
옵션. 추가적인 설정을 지정하는 플래그입니다.
다음과 같은 플래그를 사용할 수 있습니다.
|
$offset |
옵션. 검색을 시작할 문자열 내의 오프셋입니다. 0 부터 시작합니다. |
반환 값
일치하는 패턴을 문자열에서 처음으로 발견되면 검색을 중단하고 1
을 반환하고,
일치하는 패턴을 찾지 못하면 0
을 반환합니다.
에러가 발생한 경우 false
를 반환합니다.
이 함수와 유사한 preg_match_all()
함수는 주어진 정규 표현식 패턴을 사용하여 문자열 내에서 일치하는 모든 부분(match all)을 찾는 함수입니다.
예제
preg_match()
함수의 유용한 예제입니다.
숫자 추출
$text = '가격이 500원입니다.';
$pattern = "/\d+/";
if (preg_match($pattern, $text, $matches)) {
echo '찾은 숫자: ' . $matches[0];
} else {
echo '숫자를 찾을 수 없습니다.';
}
// 출력: '찾은 숫자: 500'
URL에서 도메인 추출
$url = 'https://www.example.com/page';
$pattern = "/https:\/\/(www\.)?([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,6})\/([a-zA-Z0-9.-\/]*)/";
if (preg_match($pattern, $url, $matches)) {
$domain = $matches[2];
echo '추출된 도메인: ' . $domain;
} else {
echo '도메인을 찾을 수 없습니다.';
}
// 출력: '추출된 도메인: example'
전화번호 추출
$text = '문자열에서 전화번호는 010-1234-5678과 같이 나타날 수 있습니다.';
$pattern = "/\b(?:\d{2,3}[-.])?\d{3,4}[-.]\d{4}\b/";
if (preg_match($pattern, $text, $matches)) {
$phoneNumber = $matches[0];
echo '추출된 전화번호: ' . $phoneNumber;
} else {
echo '전화번호를 찾을 수 없습니다.';
}
// 출력: '추출된 전화번호: 010-1234-5678'
주의할 점
정규 표현식이 올바른지 확인해야 합니다. 잘못된 정규 표현식을 사용하면 예상치 못한 결과가 발생할 수 있습니다.
기본적으로 preg_match()
함수는 대소문자를 구분합니다. 만약 대소문자를 구분하지 않고 싶다면 정규 표현식에 /i
플래그를 추가하세요.
$text = 'Hello, World!';
$pattern = "/hello/i";
if (preg_match($pattern, $text, $matches)) {
echo '대소문자 구분 없이 일치하는 문자열을 찾았습니다: ' . $matches[0];
} else {
echo '일치하는 문자열을 찾을 수 없습니다.';
}
// 출력: '대소문자 구분 없이 일치하는 문자열을 찾았습니다: Hello';
하나의 문자열이 다른 문자열에 포함되어 있는지만 확인하려면 이 함수보다 더 빠르게 수행하는 strpos()
함수를 사용하는 것이 좋습니다. strpos()
함수는 간단하고 빠르게 작동하며, 문자열의 포함 여부를 확인하는 간단한 작업에 적합합니다.
$str = 'Hello, World!';
$substring = 'Hello';
$pos = strpos($str, $substring);
if ($pos === false) {
echo "문자열에 'Hello'를 찾을 수 없습니다.";
} else {
echo "문자열에 'Hello'가 포함되어 있습니다.";
}
// 출력: "문자열에 'Hello'가 포함되어 있습니다."
참고문헌
같이 보기
- PHP strlen() 함수 - 문자열 길이 확인
- PHP strpos() 함수 – 대소문자 구분해서 문자열에 특정 문자 포함 여부 확인
- PHP stripos() 함수 – 대소문자를 구분 없이 문자열에 특정 문자 포함 여부 확인
- PHP mb_strpos() 함수 – strpos()의 한글 지원 기능 제공
- PHP str_contains() 함수 – 대소문자 구분해서 문자열에 특정 문자 포함 여부 확인
- PHP substr() 함수 - 문자열을 잘라서 추출하기
- PHP mb_substr() 함수 – substr()의 한글 깨짐을 해결하기
- PHP mb_stripos() 함수 – stripos()의 한글 지원 기능 제공
- PHP preg_replace() 함수
- PHP preg_split() 함수 - 개념 정리 및 사용 예제
- PHP str_replace() 함수 – 문자열에서 특정 문자열을 다른 문자열로 바꾸는 함수
- PHP trim() 함수 - 문자열의 양쪽 끝에서 공백 또는 지정된 문자열 제거
- 자바스크립트 문자열 match() 함수 - 개념 정리 및 사용 예제