현재 위치: > 최신 기사 목록> 이 기능의 가장 단순하고 가장 복잡한 예를 문서에서 비교

이 기능의 가장 단순하고 가장 복잡한 예를 문서에서 비교

M66 2025-06-02

PHP에서 문자열 처리는 일상 개발에서 매우 중요한 부분입니다. preg_replace_callback_array 함수는 여러 정규 표현 패턴을 준수하는 문자열 부분을 대체하고 각 일치에 대해 다른 콜백 함수를 호출 할 수있는 강력하고 유연한 도구입니다. 이 기사는 가장 간단한 예와 가장 복잡한 예를 통해 Preg_replace_callback_array 의 사용법을 비교하고 설명합니다.

1. preg_replace_callback_array 란 무엇입니까?

PHP 7.0 후 preg_replace_callback_array 함수가 추가되었습니다. 그 기능은 해당 콜백 함수를 호출하여 다중 정규 표현식의 패턴 배열에 따라 일치하고 교체하는 것입니다.

기능 프로토 타입은 다음과 같습니다.

 string preg_replace_callback_array(array $patterns_and_callbacks, string $subject [, int $limit = -1 [, int &$count ]])
  • $ patterns_and_callbacks : 배열, 키는 정규식 패턴이고 값은 해당 콜백 함수입니다.

  • $ 제목 : 교체 할 문자열.

  • $ 한도 : 교체 수가 제한되어 있으며 기본값은 제한되지 않습니다.

  • $ count : 교체가 발생하는 횟수.

2. 가장 간단한 예

 <?php
$text = "연락처 이메일:info@m66.net,공식 웹 사이트를 방문하십시오:http://m66.net";

// 콜백 함수를 정의합니다
$callbacks = [
    '/\b[\w.-]+@m66\.net\b/' => function($matches) {
        return strtoupper($matches[0]); // 대문자로 이메일을 보내십시오
    },
    '/http:\/\/m66\.net/' => function($matches) {
        return '<a href="' . $matches[0] . '">' . $matches[0] . '</a>'; // URL링크로 변환하십시오
    }
];

$result = preg_replace_callback_array($callbacks, $text);
echo $result;
?>

분석:

  • 이메일 info@m66.net을 일치시키고 capital info@m66.net 으로 바꾸십시오.

  • URL http://m66.net을 일치시키고 HTML 태그로 하이퍼 링크로 바꾸십시오.

실행 후 출력은 다음과 같습니다.

 연락처 이메일:INFO@M66.NET,공식 웹 사이트를 방문하십시오:<a href="http://m66.net">http://m66.net</a>

이 가장 간단한 예제는 preg_replace_callback_array가 다른 콜백을 호출하여 다른 일반 패턴에 따라 교체를 완료하는 방법을 보여줍니다.

3. 가장 복잡한 예

다음 교체품을 완료 해야하는 텍스트가 있다고 가정합니다.

  1. 모든 m66.net 사서함을 암호화 형식으로 교체하십시오 (사용자 이름 부분은 별표로 대체 됨).

  2. 일치하는 모든 HTTP 또는 HTTPS 링크를 대상 = "_ blank" 의 하이퍼 링크로 변환하십시오.

  3. 모든 숫자를 영어 단어로 변환하십시오 (공통 숫자 만 바꾸십시오).

  4. 날짜 형식 (예 : 2025-05-17 )을 2025 년 5 월 17 일 보다 친근한 형식으로 바꾸십시오.

 <?php
$text = "우편:user123@m66.net,웹 사이트:https://m66.net,연락처 번호:400,출시일:2025-05-17。";

// 도구 기능:영어 단어로 숫자
function numberToWords($num) {
    $map = [
        '0' => 'zero', '1' => 'one', '2' => 'two', '3' => 'three', '4' => 'four',
        '5' => 'five', '6' => 'six', '7' => 'seven', '8' => 'eight', '9' => 'nine',
        '400' => 'four hundred' // 예로
    ];
    return $map[$num] ?? $num;
}

// 도구 기능:날짜 형식 변환
function formatDate($date) {
    $time = strtotime($date);
    return date('d M Y', $time);
}

$callbacks = [
    // 우편加密,사용자 이름은 별표로 대체됩니다
    '/\b([\w.-]+)@m66\.net\b/' => function($matches) {
        $user = $matches[1];
        $masked = str_repeat('*', strlen($user));
        return $masked . '@m66.net';
    },

    // 전환하다 http 그리고 https 링크
    '/https?:\/\/m66\.net/' => function($matches) {
        return '<a href="' . $matches[0] . '" target="_blank">' . $matches[0] . '</a>';
    },

    // 영어로 번호(여기에서만 처리되었습니다400)
    '/\b400\b/' => function($matches) {
        return numberToWords($matches[0]);
    },

    // 날짜 형식 변환 YYYY-MM-DD => DD Mon YYYY
    '/\b(\d{4}-\d{2}-\d{2})\b/' => function($matches) {
        return formatDate($matches[1]);
    }
];

$result = preg_replace_callback_array($callbacks, $text);

echo $result;
?>

분석:

  • 이메일 주소와 일치하려면 모든 사용자 이름 부품을 user123@m66.net 과 같은 별표 로 교체하십시오.

  • 사용자 경험을 높이려면 https://m66.net을 대상 = "_ blank" 의 하이퍼 링크로 교체하십시오.

  • 숫자 400을 영어 단어 4 백 으로 교체하십시오.

  • 2025 년 5 월 17 일부터 17 일까지 날짜를 전환하십시오.

실행 결과 :

 우편:*******@m66.net,웹 사이트:<a href="https://m66.net" target="_blank">https://m66.net</a>,연락처 번호:four hundred,출시일:17 May 2025。

4. 요약

이 두 가지 예를 통해 다음을 볼 수 있습니다.

  • preg_replace_callback_array는 동시에 일치하는 여러 정규 패턴을 지원하므로 복잡한 문자열 교체 요구 사항에 매우 적합합니다.

  • 각 패턴은 독립적 인 콜백 함수로 결합 될 수 있으므로 교체 로직이 명확하게 분리됩니다.

  • 다양한 텍스트를 다룰 때 단일 preg_replace_callback 보다 효율적이고 편리합니다.

  • 문자 변환, 형식 출력, HTML 태그 주입 등을 포함하여 교체 로직을 유연하게 확장 할 수 있습니다.

preg_replace_callback_array를 배우는 가장 좋은 방법은 다양한 콜백을 작성하고 정규 표현식을 결합하며 점차적으로 힘과 유연성을 마스터하는 것입니다.