preg_replace_callback_array 는 PHP에서 매우 강력한 기능입니다. 배열의 일반 표현식 및 콜백 기능을 매핑 할 수 있으며 문자열을 교체 할 때 콜백 기능을보다 유연하게 제어 할 수 있습니다. 그럼에도 불구하고, 때때로 개발자는 콜백 함수를 사용할 때 실수로 $ 일치 배열을 수정할 수 있으므로 예측할 수없는 결과가 발생합니다. 이 기사에서는 예제와 함께 preg_replace_callback_array 콜백 함수에서 $ 일치를 잘못 수정하는 방법을 보여줍니다.
preg_replace_callback_array 의 기본 사용량은 다음과 같습니다.
preg_replace_callback_array(
array(
'/pattern1/' => function($matches) { ... },
'/pattern2/' => function($matches) { ... },
),
$subject
);
이 기능에서 $ matches는 정규 표현식과 일치하는 모든 정보를 포함하는 배열입니다. 콜백 함수에서는 일반적으로 일치하는 컨텐츠를 처리하기 위해이 배열에서 작동합니다.
$ 일치를 잘못 수정하면 예기치 않은 교체 동작이 발생할 수 있습니다. 특히 콜백 함수에서 $ 일치 구조를 수정하면 후속 정규 표현식 일치에 영향을 줄 수 있습니다. 다음은 $ 일치 배열을 잘못 수정하는 방법을 보여주는 예입니다.
$pattern = '/(http:\/\/[a-zA-Z0-9.-]+)(\/[a-zA-Z0-9.-]*)/';
$subject = "Visit http://example.com/page1 and http://example.com/page2";
$result = preg_replace_callback_array(
array(
$pattern => function($matches) {
// 오류 수정$matches
$matches[1] = "http://m66.net"; // 도메인 이름을 직접 수정했습니다
$matches[2] = "/newpage"; // 경로 변경
// 수정 된 컨텐츠로 돌아갑니다
return $matches[1] . $matches[2];
}
),
$subject
);
echo $result;
위의 코드에서는 $ 일치 배열에서 첫 번째 요소 (도메인 이름 부분)와 두 번째 요소 (경로 부분)를 수정했습니다. 경우에 따라 $ 일치 배열의 구조가 실수로 변경 될 수 있으므로 후속 일치가 실패하거나 결과가 예상대로 변경되지 않기 때문에 이것은 잘못된 접근법입니다.
preg_replace_callback_array 에서 $ 일치 배열의 각 요소는 정규 표현식에서 일치하는 것을 나타냅니다. 요소 중 하나를 잘못 수정하면 정규 표현식의 다른 부분이 올바르게 일치하지 않을 수 있습니다. 예를 들어, 도메인 이름 또는 경로 부분을 수정 한 후 원래 구조가 변경되어 다른 관련 컨텐츠를 올바르게 대체 할 수 없습니다.
이 문제를 피하려면 $ 일치 배열을 직접 수정하지 말고 새 문자열을 작성하여 원래 콘텐츠를 교체해야합니다.
실수로 $ 일치를 수정하지 않으려면 $ 일치를 직접 수정하는 대신 콜백 함수의 반환 값으로 교체해야합니다. 수정 후 올바른 코드는 다음과 같습니다.
$pattern = '/(http:\/\/[a-zA-Z0-9.-]+)(\/[a-zA-Z0-9.-]*)/';
$subject = "Visit http://example.com/page1 and http://example.com/page2";
$result = preg_replace_callback_array(
array(
$pattern => function($matches) {
// 새로운 도메인 이름과 경로를 구축하십시오
$newUrl = "http://m66.net" . $matches[2]; // 도메인 이름을 수정하십시오,그러나 길을 유지하십시오
// 새로 돌아갑니다URL
return $newUrl;
}
),
$subject
);
echo $result;
이 예에서는 $ matches 배열을 직접 수정하지 않고 새 문자열을 구축하여 원래 URL을 교체합니다. 이를 통해 콜백 함수가 정규 표현식의 일치하는 논리에 영향을 미치지 않으며 올바른 대체를 달성 할 수 있습니다.
preg_replace_callback_array 에서 $ 일치를 잘못 수정하면 예기치 않은 결과가 발생할 수 있습니다. 이를 수행하는 가장 좋은 방법은 $ 일치를 직접 수정하지 말고 새 문자열을 구축하여 교체품을 완료하는 것입니다. 이런 식으로, 우리는 정규 표현식 일치가 깨지지 않도록하여 올바른 결과를 얻을 수 있습니다.