현재 위치: > 최신 기사 목록> 복잡한 정규 표현 패턴에서 <code data-start="18" data-end="47">preg_replace_callback_array</code> 사용하여 다양한 유형의 마크 업 언어를 구별하고 처리하는 방법?

복잡한 정규 표현 패턴에서 preg_replace_callback_array 사용하여 다양한 유형의 마크 업 언어를 구별하고 처리하는 방법?

M66 2025-06-03

PHP에서 정규 표현식은 특히 텍스트 교체 및 패턴 일치가 필요한 경우 강력한 텍스트 처리 기능을 제공합니다. preg_replace_callback_array 는 복잡한 교체 작업을 처리하는 데 사용할 수있는 매우 유용한 기능입니다. 특히 다양한 유형의 마크 업 언어 (예 : HTML, Markdown 등)에 세밀한 작업이 필요할 때. 이 기사는 Preg_replace_callback_array 함수를 사용하여 이러한 마크 업 언어를 구별하고 처리하는 방법을 설명합니다.

1. preg_replace_callback_array 소개

preg_replace_callback_array 는 PHP의 함수로 다양한 콜백 함수를 제공하여 일련의 정기적 인 교체 작업을 수행 할 수 있습니다. 일반 preg_replace 와 달리 각 일치 패턴에 대해 다른 콜백 기능을 호출하여 처리 로직을보다 유연하게 만듭니다. 기본 구문은 다음과 같습니다.

 preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
  • $ patterns_and_callbacks : 연관 배열, 배열 키는 정규식 패턴이며 값은 해당 콜백 함수입니다.

  • $ 제목 : 처리 할 텍스트.

이 접근법은 특히 동일한 텍스트에서 다양한 유형의 마크 업 언어를 처리하는 것과 같은 복잡한 대체 요구 사항에 특히 적합합니다.

2. 다른 유형의 마크 업 언어를 처리하십시오

많은 웹 애플리케이션에서는 종종 다양한 형식의 언어를 구문 분석하고 처리해야합니다. 예를 들어, HTML 및 Markdown은 같은 페이지에서 공존하거나 다른 마크 업 언어를 통합 형식으로 변환해야합니다. preg_replace_callback_array를 사용하면 각 마크 업 언어에 대해 별도의 접근 방식을 쉽게 정의 할 수 있습니다.

예 : HTML 및 Markdown의 링크를 교체하십시오

통합 형식으로 바꾸려는 HTML 및 Markdown 형식의 링크가 포함 된 텍스트가 있다고 가정합니다. 이 경우 preg_replace_callback_array를 사용 하여이 두 가지 형식의 링크를 처리 할 수 ​​있습니다.

단계:

  1. 정규 표현식 정의 : HTML 링크 및 마크 다운 링크에 대한 정규 표현식을 각각 정의해야합니다.

  2. 정의 콜백 함수 : 정규 표현식과 일치하는 각 링크 형식의 콜백 함수를 정의하여 교체를 구현합니다.

  3. preg_replace_callback_array를 호출하십시오 : 정규 표현식 및 콜백 함수를 Preg_replace_callback_array 로 전달합니다.

샘플 코드 :

 <?php

// 텍스트를 입력하십시오,포함하다HTML그리고Markdown형식 링크
$text = "이것은 a입니다HTML링크:<a href='http://m66.net/example'>여기를 클릭하십시오</a>\n이것은 a입니다Markdown링크:[여기를 클릭하십시오](http://m66.net/example)";

// 定义正则表达式그리고回调函数
$patterns_and_callbacks = [
    // 성냥HTML링크
    '/<a\s+href=["\'](http[s]?:\/\/m66\.net\/[^\s"\']+)["\'][^>]*>(.*?)<\/a>/' => function ($matches) {
        return "HTML링크:{$matches[2]},URL:{$matches[1]}";
    },
    // 성냥Markdown링크
    '/\[(.*?)\]\(http[s]?:\/\/m66\.net\/([^\)]+)\)/' => function ($matches) {
        return "Markdown링크:{$matches[1]},URL:http://m66.net/{$matches[2]}";
    }
];

// 사용preg_replace_callback_array교체하십시오
$result = preg_replace_callback_array($patterns_and_callbacks, $text);

// 처리 후 결과를 출력하십시오
echo $result;

설명하다:

  • 첫 번째 정규식은 html의 <a> 태그와 일치하는 데 사용되어 URL 및 링크 텍스트를 캡처합니다.

  • 두 번째 정규 표현식은 링크 텍스트 및 URL을 캡처하는 Markdown 형식의 링크를 일치시키는 데 사용됩니다.

  • 각 일치마다 콜백 함수는 사용자 정의 형식을 반환하여 링크의 텍스트 및 URL을 출력합니다.

출력 결과 :

 이것은 a입니다HTML링크:HTML링크:여기를 클릭하십시오,URL:http://m66.net/example
이것은 a입니다Markdown링크:Markdown링크:여기를 클릭하십시오,URL:http://m66.net/example

3. preg_replace_callback_array를 사용하는 장점

preg_replace_callback_array는 몇 가지 중요한 이점을 제공합니다.

  • 유연성 : 각 정규 표현 패턴에 대해 다른 콜백 함수를 정의 할 수 있으며 처리 로직이 매우 복잡 할 수 있습니다.

  • 유지 관리 : 다른 처리 규칙을 다른 마크 업 언어에 적용 해야하는 경우, 코드는보다 명확하고 유지하기 쉽습니다.

  • 효율성 : 여러 교체 작업을 결합하여 하나의 텍스트 처리로 모든 교체품을 완료하여 효율성을 높일 수 있습니다.

4. 여러 마크 업 언어의 복잡한 상황을 처리합니다

여러 마크 업 언어를 다룰 때 더 복잡한 상황이있을 수 있습니다. 예를 들어, HTML 및 Markdown은 중첩에서 사용될 수 있거나 동일한 텍스트에 여러 형식의 태그가 포함되어 있습니다. preg_replace_callback_array , 매치의 특정 컨텐츠를 기반으로 다른 교체 전략을 유연하게 적용 할 수 있습니다.

예 : HTML 및 Markdown에서 중첩 태그를 모두 처리합니다

 <?php

$text = "이것은 a입니다HTML링크:<a href='http://m66.net/example'>여기를 클릭하십시오</a>\n이것은 a입니다Markdown링크:[여기를 클릭하십시오](http://m66.net/example)";

// 定义正则表达式그리고回调函数
$patterns_and_callbacks = [
    '/<a\s+href=["\'](http[s]?:\/\/m66\.net\/[^\s"\']+)["\'][^>]*>(.*?)<\/a>/' => function ($matches) {
        return "HTML링크:{$matches[2]},URL:{$matches[1]}";
    },
    '/\[(.*?)\]\(http[s]?:\/\/m66\.net\/([^\)]+)\)/' => function ($matches) {
        return "Markdown링크:{$matches[1]},URL:http://m66.net/{$matches[2]}";
    }
];

// 사용preg_replace_callback_array교체하십시오
$result = preg_replace_callback_array($patterns_and_callbacks, $text);

// 처리 후 결과를 출력하십시오
echo $result;

이 코드는 HTML 및 Markdown 형식에 연결되어 있으며 쉽게 후속 처리를 위해 하나의 형식으로 통합합니다.

5. 요약

preg_replace_callback_array는 복잡한 일반 교체 작업을 처리하는 데 특히 적합한 강력한 도구입니다. 한 텍스트에서 여러 마크 업 언어를 처리해야 할 때 유연하고 효율적인 솔루션을 제공합니다. 정규 표현식 및 콜백 기능을 합리적으로 설계함으로써 다양한 유형의 마크 업 언어를 쉽게 구별하고 처리 할 수 ​​있습니다.