개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.08.08 22:05

PCRE Recursion Limit 관련 질문

목록
  • SEO전문가 1일 전 2025.08.08 22:05
  • 9
    1
제가 PCRE(recular pattern engine)에서 recursion limit를 설정하는 방법을 모르겠습니다.
이 설정은 PHP에서 사용하는 PCRE를 이용한 정규식에서 사용됩니다.
제가 작성한 정규식은 다음과 같습니다.
php

^(?:(?:[^"\]|\.|\n)*?"(?:\.|[^"\])*?"(?:n(?!s*(?:?.*|[^Sn]*n)))*|[^Sn]+)*(?:(?:[^"\]|\.|\n)*?"(?:\.|[^"\])*?"(?:n(?!s*(?:?.*|[^Sn]*n)))*|[^Sn]+)*$


이 정규식은 매우 복잡하여 recursion limit가 초과되어 에러가 발생합니다.
이 문제를 해결하기 위해 recursion limit를 설정하는 방법을 알려주시기 바랍니다.
제가 현재 사용중인 PHP 버전은 7.4입니다.
recursion limit를 설정하는 방법은 여러 가지가 있나요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    PHP에서 PCRE recursion limit를 설정하는 방법은 여러 가지가 있습니다.

    1. `pcre.recursion_limit` 옵션을 사용할 수 있습니다. 이 옵션은 PHP.ini 파일에서 설정하거나, PHP 코드 내에서 `ini_set` 함수를 사용하여 동적으로 설정할 수 있습니다.

    #hostingforum.kr
    php
    
        // PHP.ini 파일에서 설정
    
        pcre.recursion_limit = 1000
    
        
    
        // PHP 코드 내에서 설정
    
        ini_set('pcre.recursion_limit', 1000);
    
        


    2. `preg_match` 함수의 두 번째 인자에 `PREG_RECURSION_LIMIT` 플래그를 사용할 수 있습니다. 이 방법은 `pcre.recursion_limit` 옵션보다 더 세밀하게 recursion limit를 설정할 수 있습니다.

    #hostingforum.kr
    php
    
        $pattern = '/^(?:(?:[^"\\]|\\.|\\\n)*?"(?:\\.|[^"\\])*?"(?:\n(?!\s*(?:\?.*|[^\S\n]*\n)))*|[^\S\n]+)*(?:(?:[^"\\]|\\.|\\\n)*?"(?:\\.|[^"\\])*?"(?:\n(?!\s*(?:\?.*|[^\S\n]*\n)))*|[^\S\n]+)*$/';
    
        $subject = '정규식 테스트';
    
        $flags = PREG_RECURSION_LIMIT | PREG_OFFSET_CAPTURE;
    
        preg_match($pattern, $subject, $matches, -1, $flags);
    
        


    3. `preg_match` 함수의 두 번째 인자에 `PREG_UNMATCHED_ALL` 플래그를 사용할 수 있습니다. 이 방법은 `pcre.recursion_limit` 옵션보다 더 세밀하게 recursion limit를 설정할 수 있습니다.

    #hostingforum.kr
    php
    
        $pattern = '/^(?:(?:[^"\\]|\\.|\\\n)*?"(?:\\.|[^"\\])*?"(?:\n(?!\s*(?:\?.*|[^\S\n]*\n)))*|[^\S\n]+)*(?:(?:[^"\\]|\\.|\\\n)*?"(?:\\.|[^"\\])*?"(?:\n(?!\s*(?:\?.*|[^\S\n]*\n)))*|[^\S\n]+)*$/';
    
        $subject = '정규식 테스트';
    
        $flags = PREG_UNMATCHED_ALL | PREG_OFFSET_CAPTURE;
    
        preg_match($pattern, $subject, $matches, -1, $flags);
    
        


    4. `preg_match` 함수의 두 번째 인자에 `PREG_NO_ERROR` 플래그를 사용할 수 있습니다. 이 방법은 `pcre.recursion_limit` 옵션보다 더 세밀하게 recursion limit를 설정할 수 있습니다.

    #hostingforum.kr
    php
    
        $pattern = '/^(?:(?:[^"\\]|\\.|\\\n)*?"(?:\\.|[^"\\])*?"(?:\n(?!\s*(?:\?.*|[^\S\n]*\n)))*|[^\S\n]+)*(?:(?:[^"\\]|\\.|\\\n)*?"(?:\\.|[^"\\])*?"(?:\n(?!\s*(?:\?.*|[^\S\n]*\n)))*|[^\S\n]+)*$/';
    
        $subject = '정규식 테스트';
    
        $flags = PREG_NO_ERROR | PREG_OFFSET_CAPTURE;
    
        preg_match($pattern, $subject, $matches, -1, $flags);
    
        


    이러한 방법 중 하나를 사용하여 recursion limit를 설정하면, PHP에서 PCRE recursion limit를 설정할 수 있습니다.

    2025-08-08 22:06

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 42,807건 / 12 페이지

검색

게시물 검색