PHP에서 문자열 처리는 일상 개발에서 매우 중요한 부분입니다. preg_replace_callback_array 함수는 여러 정규 표현 패턴을 준수하는 문자열 부분을 대체하고 각 일치에 대해 다른 콜백 함수를 호출 할 수있는 강력하고 유연한 도구입니다. 이 기사는 가장 간단한 예와 가장 복잡한 예를 통해 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 : 교체가 발생하는 횟수.
<?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가 다른 콜백을 호출하여 다른 일반 패턴에 따라 교체를 완료하는 방법을 보여줍니다.
다음 교체품을 완료 해야하는 텍스트가 있다고 가정합니다.
모든 m66.net 사서함을 암호화 형식으로 교체하십시오 (사용자 이름 부분은 별표로 대체 됨).
일치하는 모든 HTTP 또는 HTTPS 링크를 대상 = "_ blank" 의 하이퍼 링크로 변환하십시오.
모든 숫자를 영어 단어로 변환하십시오 (공통 숫자 만 바꾸십시오).
날짜 형식 (예 : 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。
이 두 가지 예를 통해 다음을 볼 수 있습니다.
preg_replace_callback_array는 동시에 일치하는 여러 정규 패턴을 지원하므로 복잡한 문자열 교체 요구 사항에 매우 적합합니다.
각 패턴은 독립적 인 콜백 함수로 결합 될 수 있으므로 교체 로직이 명확하게 분리됩니다.
다양한 텍스트를 다룰 때 단일 preg_replace_callback 보다 효율적이고 편리합니다.
문자 변환, 형식 출력, HTML 태그 주입 등을 포함하여 교체 로직을 유연하게 확장 할 수 있습니다.
preg_replace_callback_array를 배우는 가장 좋은 방법은 다양한 콜백을 작성하고 정규 표현식을 결합하며 점차적으로 힘과 유연성을 마스터하는 것입니다.