현재 위치: > 최신 기사 목록> 불필요한 $는 캡처 그룹화와 컨텐츠와 일치하지 않도록하십시오

불필요한 $는 캡처 그룹화와 컨텐츠와 일치하지 않도록하십시오

M66 2025-06-02

PHP에서 preg_replace_callback_array 함수는 일반적으로 정기적 인 교체를 수행 할 때 콜백 작업을 수행하는 데 사용됩니다. 이 기능은 키가 일반 표현식 인 어레이를 허용하며 값은 일치하는 콜백 함수입니다. 그러나 경우에 따라 특정 그룹을 캡처하여 $ 경기 에서 나타나는 것을 방지하여 불필요한 오버 헤드 또는 복잡한 처리를 초래할 수 있습니다.

캡처되지 않은 패킷 사용

불필요한 $를 받지 않으면 preg_replace_callback_array 의 콜백 함수에서 컨텐츠와 일치하지 않으려면 캡처 그룹화를 사용할 수 있습니다. 캡처되지 않은 그룹화는 일치 할 때 일부 그룹이 캡처되지 않도록하여 콜백 기능에서 불필요한 일치 결과를 줄입니다.

캡처되지 않은 그룹화 란 무엇입니까?

캡처되지 않은 그룹화는 정기적 인 표현으로 괄호를 접두사로 선언하여 ? : . 예를 들어, (? : ...)는 비 캡처 그룹입니다. 이 경우 정규 표현식의 그룹은 $ matches 배열로 캡처되지 않지만 일치 패턴을 그룹화하는 데 사용되는 구성 요소입니다.

샘플 코드

내부에 여러 그룹의 정규 표현이 있다고 가정하지만, 다른 그룹의 내용은 다른 그룹의 내용에 대해서만 관심이 있습니다. 그런 다음 정규 표현을 최적화하기 위해 캡처되지 않은 그룹화를 사용할 수 있습니다.

 <?php
// 예:텍스트를 바꾸십시오URL
$pattern = '/(?:https?:\/\/)(m66.net\/[a-z0-9\/\?=&]*)/i';
$replacement = function ($matches) {
    // 그냥 돌봐URL의 길 부분,전체가 필요하지 않습니다URL그리고 계약 섹션
    return 'https://m66.net' . $matches[1];
};

$input = '방문하십시오 https://m66.net/abc/def?query=xyz 또는 http://m66.net/12345';
$output = preg_replace_callback_array([
    $pattern => $replacement,
], $input);

echo $output;
?>

코드 구문 분석

  1. 정규 표현 :

    • (? : https? : \/\/) :이 부분은 URL의 프로토콜 부분 (http 또는 https)과 일치하는 비과전 그룹화입니다. 이 부분이 필요하지 않으므로 캡처 그룹화를 사용합니다.

    • (m66.net \/[a-z0-9 \/\? = &]*) : 이것은 캡처 그룹이며, 우리가 관심을 갖는 것은 m66.net (예 : /abc/def? query = xyz )의 경로 부분입니다.

  2. 콜백 함수 :

    • 콜백 함수에서는 프로토콜 부분 ( https : // http : // )을 무시하고 $ matches [1] 를 통해 URL의 경로 부분을 얻습니다.

    • 프로토콜 부분이 캡처되지 않기 때문에 preg_replace_callback_array는 콜백 함수의 대체 값으로서 $ [1] 만 제공합니다.

  3. 출력 결과 :

    • 원본 텍스트의 URL은 우리가 관심있는 형식으로 올바르게 대체되며 불필요한 $ 컨텐츠는 없습니다.

요약

캡처 그룹화 (? : ...) 를 사용하면 콜백 함수에서 불필요한 일치 그룹을받지 않도록 도와줍니다. 이는 불필요한 자원 소비를 줄일뿐만 아니라 특히 복잡한 정규 표현식을 다룰 때 코드를보다 간결하고 이해하기 쉽게 만듭니다.주의가 필요한 일치하는 결과를 효과적으로 줄일 수 있습니다.