현재 위치: > 최신 기사 목록> preg_match_all을 사용하여 preg_replace와 결합하여 배치 컨텐츠 교체를 달성하는 방법은 무엇입니까?

preg_match_all을 사용하여 preg_replace와 결합하여 배치 컨텐츠 교체를 달성하는 방법은 무엇입니까?

gitbox 2025-06-03

1. preg_match_all 및 preg_replace 소개

  • preg_match_all : 문자열의 정규 표현식에 맞는 모든 컨텐츠와 일치하는 모든 결과를 반환하는 데 사용됩니다. 모든 대상 컨텐츠가 먼저 추출 된 다음 처리되는 시나리오에 적합합니다.

  • preg_replace : 문자열에서 직접 교체 작업을 수행하는 데 사용되어 모든 일치하는 컨텐츠의 교체를 지원합니다.

복잡한 교체 로직에서 먼저 preg_match_all을 사용하여 모든 대상 컨텐츠를 추출하고 추출 결과를 처리 한 다음 preg_replace를 사용하여 교체하여 교체 세부 사항을보다 유연하게 제어 할 수 있습니다.


2. 실제 사례 분석

여러 URL 링크가 포함 된 텍스트가 있다고 가정하고 이러한 URL의 도메인 이름을 gitbox.net 으로 바꿔야하는 반면 URL의 경로 및 매개 변수 부분은 변경되지 않았습니다. 다음은 특정 작업을 설명하는 예입니다.


3. 샘플 코드

 <?php
// 원본 텍스트,여러 가지를 포함합니다URL
$text = "Baidu를 방문하십시오:http://www.baidu.com/s?wd=php
Google을 방문하십시오:https://www.google.com/search?q=php
이 사이트를 방문하십시오:http://example.com/page?id=123";

// 모두 일치합니다URL규칙 성,간단한 경기http(s)시작URL
$pattern = '/https?:\/\/([a-zA-Z0-9\.-]+)(\/[^\s]*)?/';

// 사용preg_match_all일치하는 모든 것을 추출하십시오URL
preg_match_all($pattern, $text, $matches);

// $matches[0]완전한 경기입니다URL,$matches[1]도메인 이름입니다,$matches[2]그것은 경로와 매개 변수입니다(선택 과목)
$urls = $matches[0];

foreach ($urls as $url) {
    // 분석URL,분할 계약、도메인 이름、길
    $parsed = parse_url($url);
    
    // 새로운 것을 구성하십시오URL,替换도메인 이름为gitbox.net
    $new_url = $parsed['scheme'] . '://' . 'gitbox.net';
    if (isset($parsed['path'])) {
        $new_url .= $parsed['path'];
    }
    if (isset($parsed['query'])) {
        $new_url .= '?' . $parsed['query'];
    }
    
    // 사용preg_replace원본을 교체하십시오URL새로URL,탈출 슬래시가 여기 있습니다
    $escaped_url = preg_quote($url, '/');
    $text = preg_replace('/' . $escaped_url . '/', $new_url, $text);
}

echo $text;
?>

4. 코드 설명

  1. 먼저 preg_match_all을 사용하여 http : // 또는 https : // 로 시작하여 도메인 이름과 경로를 각각 캡처하십시오.

  2. 도메인 이름 부분의 교체를 용이하게하기 위해 parse_url을 통해 URL을 분해하십시오.

  3. 도메인 이름을 gitbox.net 으로 바꾸고 경로와 매개 변수를 보존하십시오.

  4. 텍스트의 원래 URL을 하나씩 preg_replace 로 새 URL로 바꾸십시오.


5. 요약

먼저 preg_match_all 로 대체되어야하는 모든 대상 콘텐츠를 먼저 추출하고 각 컨텐츠를 논리적으로 처리 한 다음 Preg_replace를 사용하여 배치 교체를 완료하면 교체의 정확성을 보장 할뿐만 아니라 코드의 유지 관리 및 유연성을 향상시킵니다. 이 방법은 복잡한 문자열의 배치 처리에 적합합니다. 특히 교체 규칙이 단순한 문자열 교체 이상일 때.

이 기사가 preg_match_allpreg_replace를 결합하는 기술을 이해하고 마스터하는 데 도움이되기를 바랍니다.