개발자 Q&A

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

2025.05.01 11:13

MongoDBBSONRegex::unserialize 관련 질문

목록
  • 리트코드광 14일 전 2025.05.01 11:13
  • 55
    1
제가 MongoDB의 BSONRegex를 사용하여 정규표현식을 unserialize하는 과정에서 문제가 있습니다.

BSONRegex::unserialize 메소드는 BSON 형식의 정규표현식을 unserialize하는 메소드입니다. 하지만 이 메소드를 사용하여 unserialize한 정규표현식이 실제로 작동하지 않는 경우가 있습니다.

예를 들어, 다음 정규표현식이 BSON 형식으로 serialize되어 있는 경우,



{

  "regex": {

    "pattern": "/^\d{4}-\d{2}-\d{2}$/"

  }

}



이 정규표현식을 unserialize한 후, 이 정규표현식을 사용하여 문자열을 검사할 때, 실제로 작동하지 않는 경우가 있습니다.



$regex = MongoDBBSONRegex::unserialize($bsonRegex);

if ($regex->match('2022-07-25')) {

  echo '매칭됨';

} else {

  echo '매칭되지 않음';

}



위의 코드가 매칭되지 않음인 경우, 왜 그런지 궁금합니다.

위의 코드가 매칭되지 않음인 이유는 무엇이며, 어떻게 하면 위의 정규표현식을 unserialize한 후, 실제로 작동하도록 할 수 있는지 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  14일 전



    BSONRegex::unserialize 메소드는 BSON 형식의 정규표현식을 unserialize하는 메소드입니다. 이 메소드를 사용하여 unserialize한 정규표현식이 실제로 작동하지 않는 경우는, serialize할 때와 unserialize할 때의 정규표현식 형식이 다르기 때문입니다.

    serialize할 때는 정규표현식을 문자열로 변환하여 BSON 형식으로 저장합니다. 따라서 serialize된 정규표현식에는 \"\\\" (역슬래시) 가 포함됩니다.

    unserialize할 때는 BSON 형식의 정규표현식을 unserialize하여 PHP 정규표현식 객체로 변환합니다. 하지만 unserialize된 정규표현식에는 \"\\\" (역슬래시) 가 포함되지 않습니다.

    따라서 위의 예제에서 \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\" 정규표현식을 unserialize한 후, 이 정규표현식을 사용하여 문자열을 검사할 때, 실제로 작동하지 않는 이유는 \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\" 정규표현식에 포함된 \"\\\" (역슬래시) 가 제거된 것 때문입니다.

    위의 정규표현식을 unserialize한 후, 실제로 작동하도록 하려면, serialize할 때와 동일한 형식으로 정규표현식을 unserialize해야 합니다. 따라서 위의 예제에서 \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\" 정규표현식을 unserialize할 때, \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\" 대신 \"^\\\\\\\\d{4}-\\\\\\\\d{2}-\\\\\\\\d{2}$\" 정규표현식을 unserialize하면, 실제로 작동하도록 할 수 있습니다.

    다음은 예제 코드입니다.

    
    
    $regex = MongoDBBSONRegex::unserialize('{"regex":{"pattern":"^\\\\d{4}-\\\\d{2}-\\\\d{2}$"}}');
    
    if ($regex->match('2022-07-25')) {
    
      echo '매칭됨';
    
    } else {
    
      echo '매칭되지 않음';
    
    }
    
    


    위의 코드를 실행하면, 매칭됨이 출력됩니다.

    2025-05-01 11:14

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

검색

게시물 검색