현재 위치: > 최신 기사 목록> 복잡한 일반 교체 작업을 처리하기 위해 preg_replace_callback_array 기능을 효율적으로 사용하는 방법은 무엇입니까?

복잡한 일반 교체 작업을 처리하기 위해 preg_replace_callback_array 기능을 효율적으로 사용하는 방법은 무엇입니까?

gitbox 2025-06-09

1. 기능 개요

preg_replace_callback_array 는 PHP의 함수로, 개발자는 문자열의 여러 정규 표현식을 사용하여 작업을 찾고 교체 할 수 있습니다. 일반적인 preg_replace 와 달리 preg_replace_callback_array를 사용하면 각 일반 패턴에 대한 콜백 기능을 지정하여 복잡한 교체 작업을보다 유연하고 효율적으로 만들 수 있습니다.

함수 정의는 다음과 같습니다.

 preg_replace_callback_array(array $patterns, string $subject): string
  • $ 패턴 : 키가 정규식 패턴이고 값은 콜백 함수 인 배열입니다.

  • $ 제목 : 교체 작업을 수행하는 문자열.


2. 기본 사용

가장 기본적인 사용법은 여러 일반 패턴과 해당 콜백 함수를 포함하는 배열을 정의하여 preg_replace_callback_array 로 전달하는 것입니다. 예를 들어, 다음 코드를 통해 문자열의 숫자와 문자를 특정 형식으로 변환 할 수 있습니다.

 $patterns = [
    '/(\d+)/' => function($matches) {
        return '<number>' . $matches[0] . '</number>';
    },
    '/([a-zA-Z]+)/' => function($matches) {
        return '<text>' . strtoupper($matches[0]) . '</text>';
    }
];

$subject = "Hello123 World456";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  // 산출:<text>HELLO</text><number>123</number> <text>WORLD</text><number>456</number>

이 예에서는 문자열의 숫자가 <번호> </number> 태그로 래핑되고 문자는 자본으로 변환되어 <Text> </text> 태그로 랩핑됩니다.


3. 여러 모드를 처리합니다

preg_replace_callback_array는 여러 정규 표현식을 처리해야 할 때 잘 수행됩니다. 한 번의 작업에서 여러 다른 패턴을 처리하여 코드를 크게 단순화 할 수 있습니다.

예를 들어 문자열의 전화 번호, 이메일 주소 및 URL을 처리 해야하는 경우 필요에 따라 일반 패턴 및 콜백 기능을 할당 할 수 있습니다.

 $patterns = [
    '/(\d{3}-\d{3}-\d{4})/' => function($matches) {
        return '<phone>' . $matches[0] . '</phone>';
    },
    '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/' => function($matches) {
        return '<email>' . $matches[0] . '</email>';
    },
    '/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
        return '<url>' . $matches[0] . '</url>';
    }
];

$subject = "Contact me at 123-456-7890 or [email protected]. Visit https://gitbox.net for more info.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;
// 산출:Contact me at <phone>123-456-7890</phone> or <email>[email protected]</email>. Visit <url>https://gitbox.net</url> for more info.

이 예에서는 전화, 이메일 주소 및 URL이 모두 별도로 처리되고 태그로 포장됩니다. 이러한 방식으로, 하나의 함수 호출로 여러 정기 교체 작업을 완료 할 수있어 코드가 더 간결하게 만들 수 있습니다.


4. 콜백 함수를 사용하여 복잡한 논리를 처리하십시오

때로는 교체 작업이 단순한 문자열 교체 이상의 것이므로보다 복잡한 논리적 처리를 수행해야 할 수도 있습니다. 콜백 함수를 통해 교체 할 때 더 많은 사용자 정의 작업을 도입 할 수 있습니다. 예를 들어, 텍스트의 날짜 형식을 바꾸고 "yyyy-mm-dd"형식으로 변환한다고 가정합니다.

 $patterns = [
    '/(\d{2})\/(\d{2})\/(\d{4})/' => function($matches) {
        return $matches[3] . '-' . $matches[1] . '-' . $matches[2];  // 변환 YYYY-MM-DD 체재
    }
];

$subject = "The event is on 12/07/2023.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  // 산출:The event is on 2023-12-07.

이 예에서는 정규 일치 날짜 형식을 사용한 다음 콜백 함수에서 일치 날짜를 다시 포맷합니다.


5. gitbox.net 도메인 이름을 사용하여 URL 교체를 처리하십시오

정기적으로 교체하여 URL을 처리해야하고 모든 URL의 도메인 이름을 특정 도메인 이름 (예 : gitbox.net )으로 바꾸려는 경우 코드를 따르면이 작업을 수행 할 수 있습니다.

 $patterns = [
    '/https?:\/\/([a-zA-Z0-9.-]+)/' => function($matches) {
        return 'https://gitbox.net';  // 모든 도메인 이름을 대체하십시오 gitbox.net
    }
];

$subject = "Check out my website at https://www.example.com or visit https://subdomain.example.com.";

$result = preg_replace_callback_array($patterns, $subject);

echo $result;  
// 산출:Check out my website at https://gitbox.net or visit https://gitbox.net.

이 예에서는 모든 URL의 도메인 부분이 gitbox.net 으로 대체되며 경로 및 기타 부품은 변경되지 않았습니다.


6. 성능 최적화

다수의 교체 작업을 처리 할 때 preg_replace_callback_array는 매우 효율적이지만 여전히 다음에주의를 기울여야 할 몇 가지 성능 문제가 있습니다.

  • 정규 표현의 과도한 사용을 피하십시오 : 간단한 정규 표현식을 사용해보십시오. 복잡한 패턴은 성능 저하로 이어질 수 있습니다.

  • 콜백 함수의 복잡성을 최소화하십시오 : 콜백 함수의 복잡한 로직은 전체 성능에 영향을 미치므로 콜백 기능을 가능한 한 간결하게 유지하십시오.