현재 위치: > 최신 기사 목록> 콜백 함수의 오류 예제 $ 일치를 수정합니다.

콜백 함수의 오류 예제 $ 일치를 수정합니다.

M66 2025-06-02

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 에서 $ 일치를 잘못 수정하면 예기치 않은 결과가 발생할 수 있습니다. 이를 수행하는 가장 좋은 방법은 $ 일치를 직접 수정하지 말고 새 문자열을 구축하여 교체품을 완료하는 것입니다. 이런 식으로, 우리는 정규 표현식 일치가 깨지지 않도록하여 올바른 결과를 얻을 수 있습니다.