preg_replace_callback_array () 는 PHP에서 다른 콜백 함수를 호출하여 여러 정규 표현식의 일치에서 교체 작업을 수행하는 매우 강력한 기능입니다. 정규 표현 패턴과 콜백 함수로 구성된 연관 배열을 함수로 전달하여 여러 교체 작업을 구현합니다. 그러나 실제로 사용하는 동안 콜백 함수의 반환 값의 오류로 인해 교체 실패 문제가 발생할 수 있습니다.
preg_replace_callback_array () 함수는 두 가지 매개 변수를 수신합니다.
패턴 : 키가 정규식 패턴이고 값은 해당 콜백 함수 인 연관 배열입니다.
제목 : 교체를 위해 실행 해야하는 대상 문자열.
이 함수가 호출되면 각 정규 표현식과 차례로 일치하고 일치하는 결과에 따라 콜백 함수를 실행합니다.
콜백 함수는 새 문자열을 반환해야하며 원래 일치하는 부분을 대체합니다. 콜백 함수가 불법 값 (예 : null , false 또는 기타 비 스트링 유형)을 반환하면 교체 작업이 실패하여 결국 원래 문자열로 돌아갑니다.
예를 들어, Preg_replace_callback_array ()를 사용하여 URL의 도메인 이름을 바꾸고 콜백 함수가 문자열을 반환한다고 가정합니다. 반환 값이 기대치를 충족하지 않거나 콜백 함수가 문자열을 올바르게 반환하지 않으면 교체품은 정상적으로 진행할 수 없습니다.
$patterns = [
'/https?:\/\/[\w\-\.]+/i' => function($matches) {
// 교체 된 도메인 이름을 올바르게 반환하십시오
return str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
}
];
$subject = "입장 https://www.example.com 또는 http://www.test.com 웹 사이트。";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
위의 코드는 https://www.example.com 및 http://www.test.com을 M66.net이 포함 된 URL로 성공적으로 대체합니다.
콜백 함수가 null 또는 false 와 같은 잘못된 값을 반환하면 교체가 실패합니다. 예를 들어:
$patterns = [
'/https?:\/\/[\w\-\.]+/i' => function($matches) {
// 오류 반환 값:반품 null
return null;
}
];
$subject = "입장 https://www.example.com 또는 http://www.test.com 웹 사이트。";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
현재 반환 된 NULL은 교체 작업이 실패하게됩니다. preg_replace_callback_array () 함수는 교체가 실패하는 것을 고려하고 최종 출력 문자열은 여전히 원래 문자열입니다.
preg_replace_callback_array ()는 콜백 함수의 반환 값에 따라 교체를 수행합니다. 콜백 함수에 의해 반환 된 값이 유효한 문자열을 형성 할 수없는 경우 PHP는 원래 일치하는 부분을 교체 할 수 없으므로 전체 교체 작업이 실패합니다. 교체 작업이 성공적이되도록 콜백 함수는 유효한 문자열을 반환해야하며 문자열은 일치를 대체하는 데 사용되는 컨텐츠입니다.
php에서 preg_replace_callback_array ()는 오류를 반환하도록 촉구하는 예외를 던지지 않습니다. 교체를 조용히 건너 뛰면 교체 결과가 기대치와 일치하지 않습니다.
이 문제를 피하려면 콜백 함수 내부의 리턴 값에 대한 확인을 추가하여 리턴 된 문자열 유형이 항상 유효한 문자열 유형인지 확인할 수 있습니다. 반환 값이 비어 있거나 유효하지 않은 경우 기본 대체 문자열을 반환하거나 디버깅에 도움이되는 예외를 던질 수 있습니다.
$patterns = [
'/https?:\/\/[\w\-\.]+/i' => function($matches) {
$new_url = str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
// 确保반품值为非空字符串
return !empty($new_url) ? $new_url : $matches[0]; // 생성 된 경우URL비어 있는,원래 일치를 유지하십시오
}
];
$subject = "입장 https://www.example.com 또는 http://www.test.com 웹 사이트。";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
이 방법은 콜백 함수에 문제가 있더라도 교체 고장을 피할 수 있도록합니다.
이 기사가 콜백 함수가 오류를 반환하고 일부 솔루션을 제공하는 이유를 이해하는 데 도움이되기를 바랍니다. 더 많은 질문이 있으시면 언제든지 질문하십시오!