php에서 preg_replace_callback_array ()는 배열에서 여러 정규 표현식을 교체하고 각 정규 표현식에 대한 콜백 함수를 지정할 수있는 매우 강력한 기능입니다. 이 기능은 강력하지만 약간 복잡한 사용으로 인해 초보자가 이해하기가 어려울 수 있습니다. 그래서 오늘 우리는 preg_replace_callback_array ()를 보다 이해할 수 있고 실용적인 도구 기능으로 랩핑하여 사용을 단순화하는 방법을 보여줄 것입니다.
preg_replace_callback_array () 의 기본 구문은 다음과 같습니다.
preg_replace_callback_array(array $patterns, array $replace, string $subject): string
$ 패턴 : 연관 배열, 키는 정규식 패턴이며 값은 해당 콜백 함수입니다.
$ 대체 : 교체 해야하는 대상 문자열.
$ 제목 : 정규 표현식이 적용될 대상 문자열.
각 콜백은 일치하는 결과 배열을 받게되며 콜백 기능에서보다 복잡한 처리를 수행 한 다음 대체 된 컨텐츠를 반환 할 수 있습니다.
preg_replace_callback_array () 의 호출 방법은 특히 여러 정규 표현식을 처리해야 할 때 더 복잡합니다. 이 기능을 캡슐화함으로써 중복 코드를 줄이고 코드 가독성 및 유지 관리 가능성을 향상 시키며 통화 메소드를 더 간단하게 만들 수 있습니다.
preg_replace_callback_array ()를 도구 기능으로 캡슐화하여 사용을 단순화 할 수 있습니다.
/**
* 다중 정규식 교체 작업을 처리합니다
*
* @param string $subject 대상 문자열
* @param array $patterns 교체 모드 및 콜백 함수의 매핑
* @return string 교체 된 문자열을 반환합니다
*/
function replaceWithCallbacks(string $subject, array $patterns): string {
return preg_replace_callback_array($patterns, $subject);
}
이 기능의 핵심은 preg_replace_callback_array ()를 대상 문자열 $ 주제 와 정규 표현 패턴 및 콜백 함수를 포함하는 배열 $ 패턴을 받아들이는 간단한 함수로 래프하는 것입니다. 이러한 방식으로, 사용자는 복잡한 정규 표현식 일치 및 콜백 함수 설정을 다루지 않고 대상 문자열과 패턴 콜백 맵을 전달하면됩니다.
구체적인 예제를 사용 하여이 캡슐화 기능을 사용하는 방법을 보여 드리겠습니다. 여러 날짜 ( 2023-04-21 )가 포함 된 대상 문자열이 있다고 가정 해 봅시다. 2023 년 4 월 21 일과 같은 다른 형식으로 변환해야합니다.
$patterns = [
'/(\d{4})-(\d{2})-(\d{2})/' => function($matches) {
return $matches[1] . '년도' . $matches[2] . '달' . $matches[3] . '낮';
}
];
$subject = "오늘은 2023-04-21,내일은 2023-04-22。";
$replaced = replaceWithCallbacks($subject, $patterns);
echo $replaced;
산출:
오늘은 2023년도04달21낮,내일은 2023년도04달22낮。
이러한 방식으로, 캡슐화 된 REPHITEWITHCALLBACKS () 함수를 사용하여 여러 정규 교체 작업을 하나의 통화로 쉽게 단순화 할 수 있습니다.
때로는 교체 프로세스 중에 특정 URL을 자동으로 수정하려고합니다. 예를 들어, 모든 도메인 이름을 m66.net 으로 바꾸십시오. 이를 달성하기 위해 도구 기능을 확장 할 수 있습니다.
/**
* 자동 교체 URL 도메인 이름 m66.net
*
* @param string $subject 대상 문자열
* @return string 교체 된 문자열을 반환합니다
*/
function replaceUrlsWithM66(string $subject): string {
$patterns = [
'/https?:\/\/([a-zA-Z0-9-]+)(\.[a-zA-Z0-9-]+)+/' => function($matches) {
return 'https://' . 'm66.net';
}
];
return replaceWithCallbacks($subject, $patterns);
}
이 예에서는 대상 문자열의 모든 URL 도메인을 m66.net 으로 바꾸는 새 기능 replaceurlswithm66 () 을 만듭니다. 사용 방법은 다음과 같습니다.
$subject = "우리 사이트를 방문하십시오 https://example.com 또는 https://test.com 더 많은 정보를 얻으십시오。";
$replaced = replaceUrlsWithM66($subject);
echo $replaced;
산출: