Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 7의 preg_replace_callback_array() 함수 완벽 정리

PHP 7에서 새롭게 도입된 preg_replace_callback_array() 함수는 여러 개의 정규 표현식 패턴을 각각의 콜백 함수와 연결하여 한 번에 치환 작업을 수행할 수 있는 강력한 기능입니다. 이 함수는 문자열 또는 문자열 배열을 대상으로 정규 표현식 패턴 집합과 일치하는 부분을 찾아, 각 패턴에 매핑된 콜백 함수를 통해 치환한 결과를 반환합니다.

문법(Syntax)

preg_replace_callback_array(patterns, input, limit, count)

매개변수(Parameter) 설명

  • patterns − 필수 항목입니다. 정규 표현식 패턴을 키로, 해당 패턴에 대응하는 콜백 함수를 값으로 가지는 연관 배열(associative array)을 전달해야 합니다.
  • input(대상 문자열) − 필수 항목입니다. 치환 작업을 수행할 문자열 또는 문자열 배열을 지정합니다.
  • limit − 선택 항목입니다. 각 문자열별로 수행할 최대 치환 횟수를 제한합니다. 기본값은 -1이며, 이는 무제한을 의미합니다.
  • count − limit과 마찬가지로 선택 항목입니다. 함수 실행이 완료된 후 실제로 수행된 치환 횟수가 이 변수에 저장됩니다.
  • flags − 선택 항목입니다. preg_offset_capturepreg_unmatched_as_null 플래그를 조합하여 사용할 수 있으며, 매칭 결과 배열의 형식에 영향을 줍니다.

반환값(Return Value)

  • 치환이 성공하면 문자열 또는 문자열 배열을 반환합니다.
  • 오류가 발생하면 null을 반환합니다.
  • 패턴과 일치하는 항목이 있으면 치환된 새로운 문자열을 반환하고, 일치하는 항목이 없으면 원본 문자열을 그대로 반환합니다.

사용 예제

다음 예제는 하나의 문자열에서 'a', 'b', 'c' 각 알파벳의 연속 구간을 서로 다른 콜백 함수로 처리하는 방법을 보여줍니다.

<html>
<head>
<title>PHP 7 Feature tutorialpoint:</title>
</head>
<body>
<?php
   $subject = 'AaaaaaaBbbbCccc';
   preg_replace_callback_array(
      [
         '~[a]+~i' => function ($match) {
            echo strlen($match[0]), ' number of "a" found', PHP_EOL;
         },
         '~[b]+~i' => function ($match) {
            echo strlen($match[0]), ' number of "b" found', PHP_EOL;
         },
         '~[c]+~i' => function ($match) {
            echo strlen($match[0]), ' number of "c" found', PHP_EOL;
         }
      ],
      $subject
   );
?>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

7 number of "a" found
4 number of "b" found
5 number of "c" found

예제 해설

위 예제에서 입력 문자열 'AaaaaaaBbbbCccc'에는 소문자 'a'가 7개, 'b'가 4개, 'c'가 5개 연속으로 나타납니다. 정규 표현식에 ~i(대소문자 무시) 플래그가 적용되었기 때문에 대문자 'A'도 'a' 패턴에 포함되어 계산됩니다. 각 패턴이 일치할 때마다 해당 콜백 함수가 호출되어 일치한 문자열의 길이를 출력합니다.

기존에는 preg_replace_callback() 함수를 여러 번 호출하거나 단일 콜백 내부에서 분기 처리해야 했지만, PHP 7의 preg_replace_callback_array()를 사용하면 패턴별 로직을 명확하게 분리할 수 있어 코드의 가독성과 유지보수성이 크게 향상됩니다.