
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