현재 위치: > 최신 기사 목록> preg_replace에서 preg_replace_callback_array까지의 과도기 교육 설계

preg_replace에서 preg_replace_callback_array까지의 과도기 교육 설계

M66 2025-06-02

php에서 preg_replacepreg_replace_callback_array는 정기적 인 교체 작업의 함수입니다. 그것들은 비슷해 보이지만 응용 시나리오와 행동은 다양합니다. 이 기사는이 두 기능에 대한 더 깊은 이해를 안내하고 Preg_replace 에서 preg_replace_callback_array 로 원활하게 전환하는 데 도움이되며 실제 프로젝트에서 응용 프로그램을 더 잘 파악할 수 있습니다.

1. preg_replace 기능 소개

preg_replace 는 PHP에서 가장 일반적인 정규 교체 기능입니다. 그 기능은 일반 패턴을 준수하는 문자열의 일부를 찾아 주어진 대체 컨텐츠로 바꾸는 것입니다.

기본 사용 :

 $pattern = '/\d+/'; // 일치 번호
$replacement = 'NUMBER';
$string = 'There are 123 apples and 456 oranges.';

$result = preg_replace($pattern, $replacement, $string);
echo $result;

산출:

 There are NUMBER apples and NUMBER oranges.

이 예에서는 preg_replace가 문자열의 숫자 부분을 "숫자"로 대체합니다. 매개 변수는 다음과 같습니다.

  • 일반 모드 $ 패턴

  • 교체 내용 $ $ 교체

  • String $ String을 입력하십시오

preg_replace는 간단한 교체 작업에 적합하지만 교체 로직이 더 복잡하거나 다른 경기에 다른 처리가 필요한 경우 충분히 유연하지 않을 수 있습니다.

2. preg_replace_callback_array 함수 소개

preg_replace_callback_array 는 PHP 5.5에 도입 된 기능으로 정기적 인 교체를 처리 할 수있는보다 유연한 방법을 제공합니다. 주요 기능을 사용하면 각 정규식 패턴에 대한 콜백 함수를 지정하여 일치하는 결과의보다 복잡한 처리를 수행 할 수 있습니다.

기본 사용 :

 $patterns = [
    '/\d+/' => function($matches) {
        return 'NUMBER';
    },
    '/apple/' => function($matches) {
        return 'FRUIT';
    }
];
$string = 'There are 123 apples and 456 oranges.';

$result = preg_replace_callback_array($patterns, $string);
echo $result;

산출:

 There are NUMBER FRUIT and 456 oranges.

이 예에서는 preg_replace_callback_array를 사용하면 다른 일반 패턴에 대해 다른 콜백 함수를 지정할 수 있습니다. 패턴 배열에서 각 일반 패턴은 콜백 함수에 해당합니다. 콜백 함수는 매치 결과 $ 일치를 수신하고 교체 값을 반환합니다.

이 방법은 preg_replace 보다 유연하며 복잡한 교체 로직을 처리하는 데 적합합니다. 예를 들어 간단한 문자열 교체로 제한되지 않고 일치하는 컨텐츠를 기반으로 다른 처리를 수행 할 수 있습니다.

3. preg_replacepreg_replace_callback_array 의 비교

3.1 유연성

  • preg_replace는 간단한 교체 작업에 사용됩니다. 일치하는 부분을 고정 문자열로 교체 해야하는 경우 매우 효율적입니다.

  • preg_replace_callback_array를 사용하면 다양한 일치 패턴에 대해 다른 콜백 함수를 지정할 수 있으므로 대체 콘텐츠를 동적으로 계산하는 것과 같은보다 복잡한 교체 요구 사항을 처리 할 수 ​​있습니다.

3.2 성능

  • 성능 측면에서 preg_replace는 일반적으로 preg_replace_callback_array 보다 약간 빠릅니다. 후자는 각 일치를 처리하기 위해 콜백 함수를 호출해야하므로 약간의 오버 헤드가 추가됩니다.

  • 교체 로직이 간단한 경우 preg_replace가 더 효율적으로 선택해야합니다.

3.3 유지 관리

  • preg_replace_callback_array를 사용하는 경우 다른 콜백 함수에서 다른 대체 로그를 캡슐화하여 코드를 쉽게 확장하고 유지 관리 할 수 ​​있습니다.

  • preg_replace를 사용하는 경우 교체 로직이 복잡해지면 코드의 가독성과 유지 관리가 감소 할 수 있습니다.

4. preg_replace 에서 preg_replace_callback_array 로의 전환

preg_replace를 사용하는 데 익숙하지만 더 복잡한 교체 요구 사항이 프로젝트에 나타나기 시작하면 preg_replace가 요구 사항을 충족시킬 수 없다고 생각할 수 있습니다. 현재 preg_replace_callback_array 로 전환 할 수 있습니다. 전환 단계는 다음 점을 참조하십시오.

  1. 기존 코드 분석 : Preg_replace가 현재 사용되는 위치를 참조하고 어떤 교체 작업에보다 유연한 논리가 필요한지 분석하십시오.

  2. 설계 콜백 기능 : 교체 요구 사항에 따라 복잡한 교체 로직을 처리하기 위해 하나 이상의 콜백 기능을 설계합니다.

  3. 코드 교체 : preg_replace를 preg_replace_callback_array 로 교체하고 일반 패턴을 콜백 함수로 매핑하십시오.

예 : 단계별 전환

숫자와 과일 이름을 preg_replace 로 대체하는 다음 코드가 있다고 가정합니다.

 $pattern = '/(\d+)|(apple)/';
$replacement = function($matches) {
    if ($matches[1]) {
        return 'NUMBER';
    } elseif ($matches[2]) {
        return 'FRUIT';
    }
};

$string = 'I have 123 apples and 456 oranges.';
$result = preg_replace($pattern, $replacement, $string);
echo $result;

볼 수 있듯이 콜백 기능과 결합 된 preg_replace는 다양한 교체 요구 사항을 구현합니다. 그러나 이러한 코드는 확장하기 쉽지 않습니다. 우리가 더 많은 패턴을 교체한다면, 코드는 복잡하고 관리하기가 어려워 질 것입니다. 이 시점에서 preg_replace_callback_array를 사용하여 코드를보다 간결하게 만들 수 있습니다.

 $patterns = [
    '/\d+/' => function($matches) {
        return 'NUMBER';
    },
    '/apple/' => function($matches) {
        return 'FRUIT';
    },
    '/orange/' => function($matches) {
        return 'CITRUS';
    }
];

$string = 'I have 123 apples and 456 oranges.';
$result = preg_replace_callback_array($patterns, $string);
echo $result;

이러한 방식으로 각 일반 패턴은 콜백 함수에 해당하여 코드를 더 명확하고 유지 관리하기 쉽게 만듭니다.

5. 요약

preg_replacepreg_replace_callback_array는 각각 고유 한 장점과 단점이 있습니다. preg_replace는 간단한 교체에 적합한 반면, preg_replace_callback_array는 보다 복잡한 교체 작업에 유연성이 향상됩니다. preg_replace_callback_array를 밟으면 필요할 때보다 복잡한 정기적 인 교체 로직을 구현하고 코드의 유지 관리 가능성을 향상시킬 수 있습니다. 실제 요구에 따라 둘 사이의 차이와 올바른 기능을 선택하면 PHP 프로젝트에서 정기 표현 관련 작업을보다 효율적으로 처리하는 데 도움이됩니다.