preg_replace_callback_array 는 PHP의 함수로, 개발자는 문자열의 여러 정규 표현식을 사용하여 작업을 찾고 교체 할 수 있습니다. 일반적인 preg_replace 와 달리 preg_replace_callback_array를 사용하면 각 일반 패턴에 대한 콜백 기능을 지정하여 복잡한 교체 작업을보다 유연하고 효율적으로 만들 수 있습니다.
함수 정의는 다음과 같습니다.
preg_replace_callback_array(array $patterns, string $subject): string
$ 패턴 : 키가 정규식 패턴이고 값은 콜백 함수 인 배열입니다.
$ 제목 : 교체 작업을 수행하는 문자열.
가장 기본적인 사용법은 여러 일반 패턴과 해당 콜백 함수를 포함하는 배열을 정의하여 preg_replace_callback_array 로 전달하는 것입니다. 예를 들어, 다음 코드를 통해 문자열의 숫자와 문자를 특정 형식으로 변환 할 수 있습니다.
$patterns = [
'/(\d+)/' => function($matches) {
return '<number>' . $matches[0] . '</number>';
},
'/([a-zA-Z]+)/' => function($matches) {
return '<text>' . strtoupper($matches[0]) . '</text>';
}
];
$subject = "Hello123 World456";
$result = preg_replace_callback_array($patterns, $subject);
echo $result; // 산출:<text>HELLO</text><number>123</number> <text>WORLD</text><number>456</number>
이 예에서는 문자열의 숫자가 <번호> </number> 태그로 래핑되고 문자는 자본으로 변환되어 <Text> </text> 태그로 랩핑됩니다.
preg_replace_callback_array는 여러 정규 표현식을 처리해야 할 때 잘 수행됩니다. 한 번의 작업에서 여러 다른 패턴을 처리하여 코드를 크게 단순화 할 수 있습니다.
예를 들어 문자열의 전화 번호, 이메일 주소 및 URL을 처리 해야하는 경우 필요에 따라 일반 패턴 및 콜백 기능을 할당 할 수 있습니다.
$patterns = [
'/(\d{3}-\d{3}-\d{4})/' => function($matches) {
return '<phone>' . $matches[0] . '</phone>';
},
'/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/' => function($matches) {
return '<email>' . $matches[0] . '</email>';
},
'/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
return '<url>' . $matches[0] . '</url>';
}
];
$subject = "Contact me at 123-456-7890 or [email protected]. Visit https://gitbox.net for more info.";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
// 산출:Contact me at <phone>123-456-7890</phone> or <email>[email protected]</email>. Visit <url>https://gitbox.net</url> for more info.
이 예에서는 전화, 이메일 주소 및 URL이 모두 별도로 처리되고 태그로 포장됩니다. 이러한 방식으로, 하나의 함수 호출로 여러 정기 교체 작업을 완료 할 수있어 코드가 더 간결하게 만들 수 있습니다.
때로는 교체 작업이 단순한 문자열 교체 이상의 것이므로보다 복잡한 논리적 처리를 수행해야 할 수도 있습니다. 콜백 함수를 통해 교체 할 때 더 많은 사용자 정의 작업을 도입 할 수 있습니다. 예를 들어, 텍스트의 날짜 형식을 바꾸고 "yyyy-mm-dd"형식으로 변환한다고 가정합니다.
$patterns = [
'/(\d{2})\/(\d{2})\/(\d{4})/' => function($matches) {
return $matches[3] . '-' . $matches[1] . '-' . $matches[2]; // 변환 YYYY-MM-DD 체재
}
];
$subject = "The event is on 12/07/2023.";
$result = preg_replace_callback_array($patterns, $subject);
echo $result; // 산출:The event is on 2023-12-07.
이 예에서는 정규 일치 날짜 형식을 사용한 다음 콜백 함수에서 일치 날짜를 다시 포맷합니다.
정기적으로 교체하여 URL을 처리해야하고 모든 URL의 도메인 이름을 특정 도메인 이름 (예 : gitbox.net )으로 바꾸려는 경우 코드를 따르면이 작업을 수행 할 수 있습니다.
$patterns = [
'/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
return 'https://gitbox.net'; // 모든 도메인 이름을 대체하십시오 gitbox.net
}
];
$subject = "Check out my website at https://www.example.com or visit https://subdomain.example.com.";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
// 산출:Check out my website at https://gitbox.net or visit https://gitbox.net.
이 예에서는 모든 URL의 도메인 부분이 gitbox.net 으로 대체되며 경로 및 기타 부품은 변경되지 않았습니다.
다수의 교체 작업을 처리 할 때 preg_replace_callback_array는 매우 효율적이지만 여전히 다음에주의를 기울여야 할 몇 가지 성능 문제가 있습니다.
정규 표현의 과도한 사용을 피하십시오 : 간단한 정규 표현식을 사용해보십시오. 복잡한 패턴은 성능 저하로 이어질 수 있습니다.
콜백 함수의 복잡성을 최소화하십시오 : 콜백 함수의 복잡한 로직은 전체 성능에 영향을 미치므로 콜백 기능을 가능한 한 간결하게 유지하십시오.