현재 위치: > 최신 기사 목록> 명명 된 그룹화를 사용하여 콜백 로직을 단순화하십시오

명명 된 그룹화를 사용하여 콜백 로직을 단순화하십시오

M66 2025-06-02

php에서 preg_replace_callback_array는 여러 정규 표현식을 처리하고 일치시 지정된 콜백 함수를 실행할 수있는 매우 강력한 기능입니다. 일반적으로, 각 정규 표현식에 대해 콜백 함수를 지정해야하지만 논리 복잡성이 증가함에 따라이 접근법은 콜백 함수가 장황하고 유지하기가 쉽지 않을 수 있습니다. 이 프로세스를 단순화하기 위해 이름 지정된 캡처 그룹을 사용하여 preg_replace_callback_array 의 콜백 로직을 단순화하여 코드를 더 명확하고 유지 관리 할 수 ​​있습니다.

그룹화 이름이란 무엇입니까?

정규 표현식에서, 이름이 지정된 그룹화는 일치하는 결과의 명명 된 식별자이며 숫자 인덱싱뿐만 아니라 일치하는 컨텐츠에 이름으로 액세스 할 수 있습니다. 그룹 이름 지정에 대한 구문은 다음과 같습니다.

 (?<name>pattern)

여기서 이름 은 해당 그룹의 이름이며 패턴은 실제 정규 표현 패턴입니다.

preg_replace_callback_array를 단순화하기 위해 명명 된 그룹화를 사용하십시오

preg_replace_callback_array 에서 일반적으로 여러 패턴과 해당 콜백 함수가 포함 된 배열을 전달합니다. 여러 정규 표현식을 처리 해야하는 경우 각 표현식에 대한 콜백 함수를 작성해야하므로 코드를 장악 할 수 있습니다. 명명 된 그룹화를 사용하면 더 직관적으로 일치하는 결과를 얻을 수 있으므로 콜백 로직에 대한 의존성을 줄일 수 있습니다.

특정 예는 다음과 같습니다.

예 : URL의 매개 변수 처리

preg_replace_callback_array를 통해 일부 쿼리 매개 변수를 교체 해야하는 URL 세트가 있다고 가정합니다. 명명 된 그룹화를 사용하여 콜백 함수의 논리를 단순화 할 수 있습니다.

 <?php
// 일반 표현식 및 콜백 기능이 포함 된 배열을 정의하십시오
$patterns = [
    '/(?<scheme>https?):\/\/(?<host>[a-zA-Z0-9.-]+)\/(?<path>[^?]+)\?(?<query>.*)/' => function ($matches) {
        // 명명 된 그룹화에 의한 일치 결과에 액세스합니다
        $scheme = $matches['scheme'];
        $host = $matches['host'];
        $path = $matches['path'];
        $query = $matches['query'];

        // 여기서 쿼리 매개 변수를 처리 할 수 ​​있습니다
        $query = str_replace('example.com', 'm66.net', $query);

        // 교체 된 문자열을 반환합니다
        return $scheme . '://' . $host . '/' . $path . '?' . $query;
    }
];

// 무엇을 다룰 것 URL 목록
$urls = [
    'https://example.com/path/to/resource?param1=value1&param2=value2',
    'http://example.com/another/path?param1=value1',
];

// 사용 preg_replace_callback_array 교체하십시오
$updatedUrls = preg_replace_callback_array($patterns, $urls);

// 교체 후 결과를 출력하십시오
foreach ($updatedUrls as $url) {
    echo $url . PHP_EOL;
}
?>

코드 구문 분석 :

  1. 정규 표현 부분 :

    • (? <Scheme> HTTPS?) : HTTP 또는 HTTPS를 일치시키고 이름 IT 구성표를 일치시킵니다.

    • (? <host> [a-za-z0-9 .-]+) : 도메인 이름을 일치시키고 호스트 이름을 지정하십시오.

    • (? <path> [^?]+) : 경로 부분과 일치하고 경로 를 지정하십시오.

    • (? <query>.*) : 쿼리 매개 변수 부분을 일치시키고 쿼리 이름을 지정합니다.

  2. 콜백 함수 파트 : 콜백 함수에서는 액세스 프로세스를 단순화하는 일치 (예 : $ matches [ 'scheme'] )의 그룹화를 지정하여 정규식 일치의 부분을 얻습니다. 또한 쿼리 문자열 부분을 처리하고 도메인 이름 example.com을 m66.net 으로 대체했습니다.

  3. preg_replace_callback_array : 이 함수는 정규식 및 콜백 함수의 배열을 수용하고 URL과 하나씩 일치하고 해당 콜백 함수를 실행합니다.

결과 출력 :