티스토리 뷰

728x90

preg_match() 함수

정규표현식으로 문자열에서 일치여부를 확인하는 함수입니다.

문자열과 정규식 패턴을 인수로 받아 문자열 부분이 패턴과 일치하는지 확인합니다.

[ 사용법 ]
preg_match(정규식 패턴, 검색대상 문자열, [일치하는 부분을 저장할 배열], [옵션 플래그], [옵션 오프셋]);
int preg_match(string $pattern, string $subject, array &$matches, int $flags, int $offset)

[ 매개변수 ]
$pattern : 검색할 정규표현식 패턴
$subject : 검색 대상이 되는 문자열
$matches : 정규표현식 패턴에 일치하는 결과를 저장할 배열
$flags : 추가적인 설정을 지정하는 플래그
   - PREG_OFFSET_CAPTURE : 모든 매치에 대한 문자열 시작위치를 반환합니다.
   - 반환값을 $matches [0]에 매치한 문자열을 가지고, $matches [1]에 문자열 시작위치를 가지는 배열.
$offset : 검색을 시작할 문자열 내의 오프셋입니다. 0부터 시작.

[ 반환값 ]
- 일치하는 정규표현식 패턴을 검색대상 문자열에서 처음으로 찾을 경우 검색을 중단하고 1을 반환.
- 일치하는 정규표현식 패턴을 찾지 못하면 0을 반환.
- Error 발생 시 false 반환.

참조 : http://php.adamharvey.name/manual/kr/function.preg-match.php

 

/* 문자열 일치확인여부 예제 */
$str = "Hello World!";
$pattern = "/hello/i";
if(preg_match($pattern, $str) == 1) {
	echo("정규식 패턴가 일치하는 문자열이 있습니다.");
} else {
	echo("정규식 패턴가 일치하는 문자열이 없습니다.");
}
// 결과) 정규식 패턴가 일치하는 문자열이 있습니다.

/* 메일주소 유효성확인 예제 */
$email = "test123@naver.com";
$pattern = "/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i";
if(preg_match($pattern, $email)) {
	echo("이메일주소가 유효한 형식입니다.");
} else {
	echo("이메일주소가 유효한 형식이 아닙니다.");
}
// 결과) 이메일주소가 유효한 형식입니다.

/* 숫자만 추출 예제 */
$str = "가격이 500원 입니다.";
$pattern = "/\d+/";
if(preg_match($pattern, $str, $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)) {
	echo("추출한 도메인 : " . $matches[2]);
} else {
	echo("도멘인을 찾을수 없습니다.");
}
// 결과) 추출한 도메인 : example

 

정규 표현식 플래그(flag) 설명
i 검색 패턴을 비교시 대소문자를 구분하지 않도록 설정함.
g 검색 패턴을 비교시 일치하는 모든 부분을 선택하도록 설정함.
m 검색 패턴을 비교시 여러 중의 입력 문자열을 그 상태 그대로 여러줄로 비교하도록 설정함.
y 대상 문자열의 현재 위치부터 비교를 시작하도록 설정함.
u 대상 문자열이 UTF-8로 인코딩된 것으로 설정함.

 

preg_match_all() 함수

정규표현식으로 문자열에서 일치하는 모든 문자열을 찾는 함수

[ 사용법 ]
preg_match(정규식 패턴, 검색대상 문자열, [일치하는 부분을 저장할 배열], [옵션 플래그], [옵션 오프셋]);
int preg_match(string $pattern, string $subject, array &$matches, int $flags, int $offset)

[ 매개변수 ]

$pattern : 검색할 정규표현식 패턴
$subject : 검색 대상이 되는 문자열
$matches : 정규표현식 패턴에 일치하는 결과를 저장할 배열
$flags : 추가적인 설정을 지정하는 플래그
   - PREG_PATTERN_ORDER : $matches [0] 배열이 전체 패턴을 가지고, $matches [1] 배열부터 
    괄호 안의 서브 패턴을 가지도록 결과를 지정합니다.
   - PREG_SET_ORDER : $matchs [0]가 처음 매치의 배열을 가지도록 하고,
     $matches [1]가 두 번째 매치의 배열을 가지도록 결과를 지정합니다.
   - PREG_OFFSET_CAPTURE : 모든 발생한 매치와 함께 오프셋을 반환합니다.
      이는 배열에서 matches의 값을 변경하는 점에 주의하세요.
      배열의 모든 원소는 매치한 문자열을 0 오프셋에 가지고, 문자열 오프셋을 1 오프셋에 가지게 됩니다.
$offset : 검색을 시작할 문자열 내의 오프셋입니다. 0부터 시작.

[ 반환값 ]
- 일치하는 모든 문자열의 개수를 반환.
- 일치하는 패턴을 찾지 못하면 0을 반환.
- 일치한 항목들을 배열에 할당하여 반환.
- 에러가 발생한 경우 false 반환

참고 : http://php.adamharvey.name/manual/kr/function.preg-match-all.php

 

/* 일치하는 모든 문자열의 개수를 반환 예제 */
$pattern = "/apple/";
$str = "apple orange banana apple";
$result = preg_match_all($pattern, $str);
if($result !== false) {
	var_dump($result);	// 변수의 정보(자료형) 출력 
}
// 결과 : int(2)

/* 문자열에서 전체 숫자 찾기 예제 */
$str = "숫자 123과 456을 찾아 주세요.";
$pattern = "/\d+/";
$matches = [];
$result = preg_match_all($pattern, $str, $matches);
if($result > 0) {
	print_r($matches);
}
// 결과 : array([0]=>array([0]=>123 [1]=>456))

/* 이메일 주소 추출 예제 */
$str = "문의는 help@example.com 또는 support@example.org 으로 연락 주시기 바랍니다.";
$pattern = "/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/";
$matches = [];
$result = preg_match_all($pattern, $str, $matches);
if($result !== fasle) {
	print_r($matches[0]);
} else {
	echo("이메일 주소를 추출하지 못하였습니다.");
}
// 결과 : Array([0]=>help@example.com [1]=>support@example.org)

/* 휴대폰번호 추출 예제 */
$str = "문의는 010-1234-5678 또는 010-4321-8765로 연락 주세요.";
$pattern = "/\d{3}-\d{4}-\d{4}/";
$matches = [];
$result = preg_match_all($pattern, $str, $matches);
if($result !== false) {
	print_r($matches[0]);
} else {
	echo("휴대폰번호를 추출하지 못하였습니다.");
}
// 결과 : Array([0]=>010-1234-5678 [1]=>010-4321-8765)

참고 : https://codingeverybody.kr/php-preg_match_all-함수

728x90

'프로그램개발' 카테고리의 다른 글

[PHP] PHPExcel 라이브러리  (0) 2024.03.28
[PHP] preg_split() 함수  (0) 2024.03.27
[PHP] preg_replae() 함수  (0) 2024.03.25
카카오 로그인 REST API [PHP]  (0) 2024.03.22
사이트 주소에 www 강제로 붙이기  (0) 2024.03.21
250x250
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Total
Today
Yesterday