// 주어진 문자열
$string = '이것은 123과 456을 포함한 샘플 텍스트입니다.';

// 패턴: 숫자 찾기
$pattern = '/\d+/';

// preg_match_all 함수 사용
$matches = array();
$num_of_matches = preg_match_all($pattern, $string, $matches);

// 결과 출력
if ($num_of_matches > 0) {
    echo '일치하는 부분의 개수: ' . $num_of_matches . '<br>';
    echo '일치한 항목들을 담은 배열: '; print_r($matches);
} else {
    echo '일치하는 부분이 없습니다. (false 반환)';
}

/*
출력:
일치하는 부분의 개수: 2
일치한 항목들을 담은 배열: Array ( [0] => Array ( [0] => 123 [1] => 456 ) )
*/
preg_match_all(
    string $pattern,
    string $subject,
    array &$matches = null,
    int $flags = 0,
    int $offset = 0
): int|false

/* preg_match_all(
	패턴,
	검색 대상이 되는 문자열,
	일치하는 부분을 저장할 배열[, 
	추가적인 설정을 지정하는 플래그[,
	검색을 시작할 문자열 내의 오프셋]]
   );
*/
$pattern = '/apple/';
$subject = "apple orange banana apple";

$result = preg_match_all($pattern, $subject);

if ($result !== false) {
    var_dump($result); // 출력: int(2)
}
$pattern = '/grape/';
$subject = "apple orange banana apple";

$result = preg_match_all($pattern, $subject);

if ($result !== false) {
    var_dump($result); // 출력: int(0)
}
error_reporting(0); // 에러 표시 비활성화

$pattern = '/apple'; // 유효하지 않은 정규 표현식을 사용
$subject = "apple orange banana apple";

$result = preg_match_all($pattern, $subject);

if ($result !== false) {
    var_dump($result);
} else {
	 echo '에러가 발생했습니다.';
}

// 출력: '에러가 발생했습니다.'
// 주어진 문자열에서 숫자 찾기
$string = '이것은 123과 456을 포함한 샘플 텍스트입니다.';

// 패턴: 숫자 찾기
$pattern = '/\d+/';

// $matches라는 빈 배열을 선언하여 할당할 공간을 마련합니다.
$matches = array();

// $matches를 매개변수에 할당합니다.
$num_of_matches = preg_match_all($pattern, $subject, $matches);

// 결과 출력
if ($num_of_matches > 0) {
	print_r($matches); //  Array ( [0] => Array ( [0] => 123 [1] => 456 ) )
}
$string = '문의는 help@example.com 또는 support@example.org 으로 연락 주시기 바랍니다.';
$pattern = '/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/';
$matches = array();

$result = preg_match_all($pattern, $string, $matches);

if ($result !== false) {
    print_r($matches[0]);
} else {
    echo '이메일 주소 형식이 없습니다.';
}

// 출력: Array ( [0] => help@example.com [1] => support@example.org )
$string = '문의는 010-9876-5432 또는 010-9876-5439로 연락 주세요.';
$pattern = '/\d{3}-\d{4}-\d{4}/';
$matches = array();

$result = preg_match_all($pattern, $string, $matches);

if ($result !== false) {
    print_r($matches[0]);
} else {
    echo '핸드폰번호 형식이 없습니다.';
}

// 출력: Array ( [0] => 010-9876-5432 [1] => 010-9876-5439 )
$string = '더 많은 정보는 https://www.example.co.kr에서 확인하세요.';
$pattern = '/\b(?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9-]+(?:\.[a-z]{2,})+(?:\/[^\s]*)?\b/';
$matches = array();

$result = preg_match_all($pattern, $string, $matches);

if ($result !== false) {
    print_r($matches[0]);
} else {
    echo 'URL 형식이 없습니다.';
}

// 출력: Array ( [0] => https://www.example.co.kr )
// 로그 파일을 문자열로 읽어옵니다.
$log = file_get_contents('error.log');

// 정규 표현식 패턴을 정의합니다.
$pattern = '/ERROR: (.+)/';

// preg_match_all 함수를 사용하여 정규 표현식 패턴과 일치하는 모든 부분을 찾아 $matches 배열에 저장합니다.
preg_match_all($pattern, $log, $matches);

// 만약 $matches 배열에 데이터가 있으면 해당 데이터를 출력합니다.
if (!empty($matches[1])) {
    echo 'Errors found:' . PHP_EOL;
    print_r($matches[1]);
} else {
    echo 'No errors found.';
}
2023-01-01 ERROR: Something went wrong.
2023-01-02 ERROR: Another error occurred.