티스토리 뷰
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)
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 |