맨위로가기

펄 호환 정규 표현식

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

펄 호환 정규 표현식(PCRE)은 펄 프로그래밍 언어에서 사용되는 정규 표현식과 호환되는 정규 표현식 라이브러리이다. JIT 컴파일러 지원, 유연한 메모리 관리, 일관된 이스케이프 규칙, 확장된 문자 클래스, 최소 일치, 유니코드 문자 속성, 다중 행 일치, 줄 바꿈/줄 바꿈 옵션, 백슬래시-R 옵션, 패턴 시작 옵션, 역참조, 명명된 하위 패턴, 서브루틴, 원자적 그룹화, 전방 및 후방 탐색, 너비가 0인 단언을 위한 이스케이프 시퀀스, 주석, 재귀 패턴, 일반 콜아웃 등의 기능을 제공한다. PCRE는 펄과는 몇 가지 차이점을 보이는데, 재귀 일치의 원자성, 숫자 이름을 가진 캡처 버퍼, 후방 탐색 내 대체 분기의 길이, 특정 "실험적" 펄 구문 미지원, 재귀 깊이 제한, 오류 구문 허용 등이 그 예시이다.

더 읽어볼만한 페이지

  • 패턴 매칭 - 퇴각검색
    퇴각검색은 해를 찾기 위해 트리 구조로 표현된 후보들을 깊이 우선 탐색 방식으로 탐색하며, 유효하지 않은 후보는 가지치기하여 탐색 시간을 단축하는 알고리즘이다.
  • 패턴 매칭 - 정규 표현식
    정규 표현식은 특정 패턴 문자열 집합을 표현하는 식으로, 스티븐 클레이니가 고안하고 켄 톰슨이 텍스트 편집기에 도입한 후 펄을 거쳐 현재 다양한 프로그래밍 언어와 환경에서 텍스트 처리 및 데이터 검증에 널리 쓰인다.
  • 펄 - 래리 월
    래리 월은 펄 프로그래밍 언어 창시자이자 rn, patch 개발자이며, 유니시스 근무 중 펄을 개발하고 《프로그래밍 펄》을 저술하는 등 펄 커뮤니티에 큰 영향을 미쳤고, 자유 소프트웨어 발전상 수상 및 펄 프로젝트의 자비로운 종신 독재자로 활동 중인 컴퓨터 과학자이자 기독교 신자이다.
  • 펄 - 펄 쿡북
    펄 쿡북은 펄 프로그래밍에 대한 실용적인 해법을 요리책 형식으로 제시하는 참고서로, 1998년과 2003년에 각각 1판과 2판이 출판되어 다양한 평가에서 찬사를 받았다.
  • C 라이브러리 - OpenSSL
    OpenSSL은 1998년에 설립된 암호화 도구 프로젝트로, 다양한 암호화 알고리즘과 프로토콜을 지원하며, 아파치 라이선스를 채택했고, 보안 문제와 API 호환성 문제 등의 비판을 받았다.
  • C 라이브러리 - SQLite
    SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다.
펄 호환 정규 표현식 - [IT 관련 정보]에 관한 문서
개요
명칭펄 호환 정규 표현식
영어 명칭Perl Compatible Regular Expressions
상세 정보
개발자필립 헤이즐
프로그래밍 언어C
운영 체제크로스 플랫폼
종류패턴 매칭 라이브러리
라이선스BSD
릴리스 정보
PCRE1 최신 버전8.45
PCRE2 최신 버전10.43
웹사이트
공식 웹사이트PCRE 공식 웹사이트

2. 주요 기능

PCRE는 의 정규 표현식 기능을 거의 대부분 지원하며, 다음과 같은 몇 가지 추가적인 기능을 제공한다.


  • '''일관된 이스케이프 규칙''': 과 마찬가지로, 모든 비알파벳 숫자 문자는 `\` (백슬래시)를 앞에 붙여 리터럴 값을 나타내도록 이스케이프할 수 있다. 백슬래시가 앞에 붙은 모든 알파벳 숫자 문자는 일반적으로 특수한 의미를 가지며, 특별한 의미로 정의되지 않은 경우 오류가 발생한다.
  • '''확장된 문자 클래스''': 단일 문자 문자 클래스는 더 긴 POSIX 이름 외에도 지원된다. 예를 들어, `\d`는 POSIX 정규 표현식에서 `:digit:`가 일치하는 것처럼 임의의 숫자에 정확히 일치한다.
  • '''최소 일치 (Ungreedy)''': `?`를 모든 반복 수량자 뒤에 붙여서 가장 짧은 일치 항목을 사용하도록 지정할 수 있다. 예를 들어, `a.*?b`는 "ababab"에서 처음 "ab"를 일치시킨다. `U` 플래그가 설정되면, 수량자는 기본적으로 비탐욕적(lazy)이 되며, `?`는 탐욕적으로 만든다.
  • '''다중 행 일치''': `^` 및 `$`는 설정된 옵션에 따라 문자열의 시작과 끝에서만 일치하거나 문자열 내 각 "줄"의 시작과 끝에서 일치할 수 있다.
  • '''역참조 (Backreferences)''': 패턴은 이전 일치의 결과물을 다시 참조할 수 있다. 예를 들어, `(a|b)c\1`는 "aca" 또는 "bcb"와 일치하지만, "acb"와는 일치하지 않는다.[1]
  • '''명명된 하위 패턴 (Named Subpatterns)''': 하위 패턴(괄호로 묶인 `(...)`)은 여는 괄호 뒤에 `?P`을 포함하여 이름을 지정할 수 있다.
  • '''서브루틴 (Subroutines)''': 이전에 정의된 하위 패턴을 재사용하는 메커니즘을 제공한다. `(a.c)(?1)`은 "aacabc" 또는 "abcadc"와 일치하지만, 역참조 `(a.c)\1`을 사용하면 일치하지 않는다.
  • '''원자적 그룹화 (Atomic Grouping)''': 패턴 내에서 역추적을 방지하는 방법이다. 예를 들어, `a++bc`는 가능한 많은 "a"를 일치시키고 하나 적게 시도하기 위해 되돌아가지 않는다.
  • '''전방 및 후방 탐색 (Look-ahead and Look-behind Assertions)''': 일치된 텍스트를 소비하지 않고 이전 또는 이후 텍스트에 패턴이 포함되어 있는지 확인할 수 있다. 예를 들어, `\w+(?=\t)`는 탭 문자를 포함하지 않고, 탭 문자가 뒤따르는 단어를 일치시킨다. 후방 탐색(Look-behind) 단언은 각 분기가 서로 다른 고정된 길이를 가질 수 있지만, 불확실한 길이를 가질 수 없다. `\K`는 현재 전체 일치의 시작점을 재설정하기 위해 패턴에서 사용할 수 있다.


단언후방 탐색(Lookbehind)전방 탐색(Lookahead)
긍정(?<=패턴)(?=패턴)
부정(?<!패턴)(?!패턴)
펄 정규 표현식의 후방 탐색 및 전방 탐색 단언


  • '''너비가 0인 단언을 위한 이스케이프 시퀀스''': `\b`는 단어 경계를 나타내는 너비가 0인 단언이며, `(?<=\W)(?=\w)|(?<=\w)(?=\W)|^|$`와 유사하다.
  • '''주석 (Comments)''': `(?#`로 시작하여 다음 닫는 괄호에서 끝나는 주석을 사용할 수 있다.
  • '''재귀 패턴 (Recursive Patterns)''': 자기 자신이나 하위 패턴을 재귀적으로 참조할 수 있다. 예를 들어, 패턴 \((a*|(?R))*\)는 균형 잡힌 괄호와 "a"의 모든 조합에 일치한다.[1]
  • '''일반 콜아웃 (Generic Callouts)''': (?C''n'') (여기서 ''n''은 어떤 숫자)을 포함할 수 있다. 이는 PCRE API를 통해 외부 사용자 정의 함수를 호출하며, 패턴에 임의의 코드를 포함하는 데 사용될 수 있다.[1]

2. 1. JIT 컴파일러 지원

JIT 컴파일러는 PCRE2 라이브러리를 빌드할 때 활성화할 수 있다. 호환되는 패턴을 사용하여 해당 기능을 반복적으로 실행하는 경우, 상당한 성능 향상을 얻을 수 있다. JIT 컴파일러 지원은 졸탄 헤르체그가 작성했으며, POSIX 래퍼에서는 다루지 않는다.

2. 2. 유연한 메모리 관리

PCRE1에서는 백트래킹에 시스템 스택을 사용했기 때문에 스택 오버플로우 문제가 자주 발생했다. PCRE2에서는 이 문제를 해결하기 위해 백트래킹 구현에 힙을 사용하도록 변경되었다. 이를 통해 메모리 사용량을 제한할 수 있게 되었고, 10.30 (2017년) 릴리스부터는 스택 오버플로우 문제가 더 이상 발생하지 않는다.[1]

2. 3. 일관된 이스케이프 규칙

PCRE2는 과 마찬가지로 일관된 이스케이프 규칙을 가지고 있다. 모든 비알파벳 숫자 문자는 문자 앞에 \ (백슬래시)를 붙여서 리터럴 값을 나타내도록 이스케이프할 수 있다. 백슬래시가 앞에 붙은 모든 알파벳 숫자 문자는 일반적으로 특수한 의미를 갖는다. 시퀀스가 특별한 것으로 정의되지 않은 경우 오류가 발생한다. 이는 경고 모드에서만 오류가 발생하는 펄과는 다르다(PCRE2에는 경고 모드가 없다). 기본적인 POSIX 정규 표현식에서는 백슬래시가 비알파벳 숫자 문자를 이스케이프하는 경우(예: \.)도 있었고, 특수한 기능을 도입하는 경우(예: \(\))도 있었다.

2. 4. 확장된 문자 클래스

단일 문자 문자 클래스는 더 긴 POSIX 이름 외에도 지원된다. 예를 들어, `\d`는 POSIX 정규 표현식에서 `:digit:`가 일치하는 것처럼 임의의 숫자에 정확히 일치한다.

2. 5. 최소 일치 (Ungreedy)

`?`는 모든 반복 수량자 뒤에 붙여서 가장 짧은 일치 항목을 사용하도록 지정할 수 있다. 기본적으로는 가장 긴 일치 항목을 먼저 시도하고 짧은 일치 항목을 거쳐 뒤로 물러난다. 예를 들어, `a.*?b`는 "ababab"에서 처음 "ab"를 일치시키는 반면, `a.*b`는 전체 문자열을 일치시킨다.

`U` 플래그가 설정되면, 수량자는 기본적으로 비탐욕적(lazy)이 되며, `?`는 탐욕적으로 만든다.

2. 6. 유니코드 문자 속성

유니코드는 각 문자에 대해 여러 속성을 정의한다. PCRE2의 패턴은 이러한 속성과 일치할 수 있다. 예를 들어 \p{Ps}.*?\p{Pe}는 [abc]와 같이 "여는 구두점"으로 시작하여 "닫는 구두점"으로 끝나는 문자열과 일치한다. 컴파일 옵션 PCRE2_UCP가 설정되면 특정 "일반" 메타문자의 일치를 유니코드 속성으로 제어할 수 있다. 이 옵션은 패턴 시작 부분에 (*UCP)를 포함하여 패턴에 설정할 수 있다. 이 옵션은 다음 메타문자의 동작을 변경한다: \B, \b, \D, \d, \S, \s, \W, \w, 그리고 일부 POSIX 문자 클래스. 예를 들어, \w (단어 문자)로 일치하는 문자 집합은 유니코드 속성에 의해 정의된 문자와 악센트 문자를 포함하도록 확장된다. 이러한 일치는 일반 (ASCII 전용) 비 UCP 대안보다 느리다. UCP 옵션을 사용하려면 라이브러리가 유니코드 지원을 포함하도록 빌드되어야 한다 (이는 PCRE2의 기본값이다). PCRE1의 초기 버전은 ASCII 코드만 지원했다. 나중에 UTF-8 지원이 추가되었다. UTF-16에 대한 지원은 버전 8.30에 추가되었고, UTF-32에 대한 지원은 버전 8.32에 추가되었다. PCRE2는 항상 세 가지 UTF 인코딩을 모두 지원해 왔다.

2. 7. 다중 행 일치

`^` 및 `$`는 설정된 옵션에 따라 문자열의 시작과 끝에서만 일치하거나 문자열 내 각 "줄"의 시작과 끝에서 일치할 수 있다.

2. 8. 줄 바꿈/줄 바꿈 옵션

PCRE가 컴파일될 때 줄 바꿈 기본값이 선택된다. 어떤 줄 바꿈이 적용되는가에 따라 PCRE가 `^` 줄 시작과 `$` 끝을 (여러 줄 모드에서) 감지하는 방식과 점(dot)이 일치하는 방식(dotall 옵션 `(?s)`가 설정되지 않은 경우, 다중 행 모드와 관계없이)에 영향을 미친다. 또한 PCRE 일치 절차에도 영향을 미친다(버전 7.0부터).[2]

PCRE가 컴파일되고 실행될 때 외부 옵션으로 줄 바꿈 옵션을 변경할 수 있다. PCRE를 사용하는 일부 애플리케이션은 사용자에게 이 설정을 외부 옵션을 통해 적용할 수 있는 수단을 제공한다. 따라서 줄 바꿈 옵션은 다음 중 하나를 사용하여 패턴의 시작 부분에서 지정할 수도 있다.[2]

  • `(*LF)`: 줄 바꿈은 줄 바꿈 문자이다. 해당 줄 바꿈은 `\n`으로 일치시킬 수 있다.
  • `(*CR)`: 줄 바꿈은 캐리지 리턴이다. 해당 줄 바꿈은 `\r`로 일치시킬 수 있다.
  • `(*CRLF)`: 줄 바꿈은 캐리지 리턴 다음에 줄 바꿈이 오는 것이다. 해당 줄 바꿈은 `\r\n`으로 일치시킬 수 있다.
  • `(*ANYCRLF)`: 데이터에서 위에서 언급한 모든 항목이 발생하면 줄 바꿈 처리가 트리거된다. 해당 줄 바꿈은 `(?:\r\n?|\n)` 또는 `\R`로 일치시킬 수 있다.
  • `(*ANY)`: 위에 언급된 모든 항목과 특수 유니코드 줄 바꿈.


UTF-8 모드가 아닌 경우 해당 줄 바꿈은 `(?:\r\n?|\n|\x0B|\f|\x85)`[2] 또는 `\R`로 일치시킬 수 있다.

UTF-8 모드에서는 `(*ANY)`를 사용하여 두 개의 추가 문자가 줄 바꿈으로 인식된다.[2]

  • LS (줄 분리기, U+2028)
  • PS (단락 분리기, U+2029)


Windows에서는 유니코드가 아닌 데이터에서 일부 `ANY` 줄 바꿈 문자가 다른 의미를 가진다.[2]

예를 들어, `\x85`는 가로 줄임표와 일치할 수 있으며, `ANY` 줄 바꿈이 적용된 상태에서 발생하면 줄 바꿈 처리가 트리거된다.[2]

2. 9. 백슬래시-R 옵션

`\R`은 줄 바꿈 문자와 일치한다. PCRE가 컴파일될 때 `\R`에 해당하는 항목에 대한 기본값이 선택된다. 기본값은 ANYCRLF에 해당하는 줄 바꿈이거나 ANY에 해당하는 줄 바꿈일 수 있다. 패턴의 시작 부분에 `(*BSR_UNICODE)` 또는 `(*BSR_ANYCRLF)`를 포함하여 필요한 경우 기본값을 재정의할 수 있다. `(*''newline'')` 옵션은 `(*BSR..)` 옵션과 함께 제공될 수 있다. (예: `(*BSR_UNICODE)(*ANY)''rest-of-pattern''`) 백슬래시-R 옵션은 패턴이 컴파일될 때 PCRE2를 호출하는 응용 프로그램에 의해 외부 옵션을 사용하여 변경할 수도 있다.

2. 10. 패턴 시작 옵션

PCRE2가 UTF 지원으로 컴파일된 경우, 패턴 시작 부분의 (*UTF) 옵션을 사용하여 외부 옵션을 설정하지 않고도 UTF-8, UTF-16 또는 UTF-32 모드를 호출할 수 있다.[1]

2. 11. 역참조 (Backreferences)

패턴은 이전 일치의 결과물을 다시 참조할 수 있다. 예를 들어 `(a|b)c\1`는 "aca" 또는 "bcb"와 일치하지만, "acb"와는 일치하지 않는다.[1]

2. 12. 명명된 하위 패턴 (Named Subpatterns)

하위 패턴(괄호로 묶인, `(...)`와 같음)은 여는 괄호 뒤에 `?P`을 포함하여 이름을 지정할 수 있다. 명명된 하위 패턴은 PCRE가 파이썬 정규 표현식에서 채택한 기능이다.

이후 Perl에서 이 기능을 채택하면서, `(?...)`, `(?'name'...)`, `(?P...)`을 사용하여 명명된 그룹을 정의할 수 있게 되었다. 명명된 그룹은 `(?P=name)` (파이썬 구문) 또는 `\k'name'` (Perl 구문)으로 역참조할 수 있다.

2. 13. 서브루틴 (Subroutines)

서브루틴은 이전에 정의된 하위 패턴을 재사용하는 메커니즘을 제공하며, 역참조가 이전에 하위 패턴과 일치했던 주제의 일부를 참조하는 메커니즘을 제공하는 것과 대조된다. 대소문자 구분을 무시하는 것과 같은 하위 패턴의 옵션은 하위 패턴이 정의될 때 고정된다. `(a.c)(?1)`은 "aacabc" 또는 "abcadc"와 일치하지만, 역참조 `(a.c)\1`을 사용하면 일치하지 않는다. 두 경우 모두 "aacaac" 또는 "abcabc"와는 일치한다. PCRE는 또한 서브루틴에 대한 비 펄 Oniguruma 구문을 지원한다. 이것들은 `\g` 또는 `\g`을 사용하여 지정된다.

2. 14. 원자적 그룹화 (Atomic Grouping)

원자 묶음은 패턴 내에서 역추적을 방지하는 방법이다. 예를 들어, `a++bc`는 가능한 많은 "a"를 일치시키고 하나 적게 시도하기 위해 되돌아가지 않는다.

2. 15. 전방 및 후방 탐색 (Look-ahead and Look-behind Assertions)

패턴은 일치된 텍스트를 소비하지 않고 이전 또는 이후 텍스트에 패턴이 포함되어 있는지 확인할 수 있다 (너비가 0인 단언). 예를 들어, `\w+(?=\t)`는 탭 문자를 포함하지 않고, 탭 문자가 뒤따르는 단어를 일치시킨다.

후방 탐색(Look-behind) 단언은 (펄과는 달리) 각 분기가 서로 다른 고정된 길이를 가질 수 있지만, 불확실한 길이를 가질 수 없다.

`\K`는 현재 전체 일치의 시작점을 재설정하기 위해 패턴에서 사용할 수 있다. 이 방법은 `\K` 앞에 있는 일치된 부분의 길이가 고정될 필요가 없기 때문에 후방 탐색 단언에 대한 유연한 대안을 제공한다.

단언후방 탐색(Lookbehind)전방 탐색(Lookahead)
긍정(?<=패턴)(?=패턴)
부정(?<!패턴)(?!패턴)
펄 정규 표현식의 후방 탐색 및 전방 탐색 단언


2. 16. 너비가 0인 단언을 위한 이스케이프 시퀀스 (Escape Sequences for Zero-Width Assertions)

`\b`는 단어 경계를 나타내는 너비가 0인 단언이며, `(?<=\W)(?=\w)|(?<=\w)(?=\W)|^|$`와 유사하다.

2. 17. 주석 (Comments)

`(?#`로 시작하여 다음 닫는 괄호에서 끝나는 주석을 사용할 수 있다.

2. 18. 재귀 패턴 (Recursive Patterns)

패턴은 재귀적으로 자기 자신이나 하위 패턴을 참조할 수 있다. 예를 들어, 패턴 \((a*|(?R))*\)는 균형 잡힌 괄호와 "a"의 모든 조합에 일치한다.[1]

2. 19. 일반 콜아웃 (Generic Callouts)

PCRE 표현식은 (?C''n'')을 포함할 수 있으며, 여기서 ''n''은 어떤 숫자이다. 이는 PCRE API를 통해 외부 사용자 정의 함수를 호출하며, 패턴에 임의의 코드를 포함하는 데 사용될 수 있다.[1]

3. 펄과의 차이점

PCRE2는 의 정규 표현식과 대부분 호환되지만, 몇 가지 차이점이 있다.[8]


  • 후방 탐색 내 대체 분기의 길이: PCRE는 후방 탐색에서 서로 다른 길이의 대체 분기를 허용하지만, 은 동일한 길이만 허용한다.[1]
  • 특정 "실험적" 펄 구문 미지원: PCRE는 `(??{...})` (반환 값이 패턴의 일부로 평가되는 콜백)와 `(?{})` 구문을 지원하지 않지만, 후자는 `(?Cn)`을 사용하여 에뮬레이션할 수 있다. 5.9.x 시리즈에 추가된 재귀 제어 동사도 지원하지 않는다.
  • 재귀 깊이 제한: PCRE는 재귀 깊이에 제한이 있지만, 은 제한이 없다.

3. 1. 재귀 일치의 원자성

이는 `"<!>!>><>>!>!>!>" =~ /^(<(?:[^<>]+|(?3)|(?1))*>)()(!>!>!>)$/` 구문이 에서는 일치하지만, PCRE2는 10.30 버전까지 일치하지 않았음을 의미한다.[1]

3. 2. 숫자 이름을 가진 캡처 버퍼

PCRE는 캡처 버퍼에 숫자 이름을 지정할 수 있지만, 펄은 그렇지 않다. 2013년 12월 15일에 출시된 PCRE 8.34부터는 그룹 이름이 숫자로 시작하는 것을 더 이상 허용하지 않으므로 이러한 차이점은 없어졌다.[9]

3. 3. 후방 탐색 내 대체 분기의 길이

PCRE는 후방 탐색 내에서 서로 다른 길이의 대체 분기를 허용하지만, 은 동일한 길이만 허용한다.[1]

3. 4. 특정 "실험적" 펄 구문 미지원

PCRE는 `(??{...})` (반환 값이 패턴의 일부로 평가되는 콜백)와 `(?{})` 구문을 지원하지 않지만, 후자는 `(?Cn)`을 사용하여 에뮬레이션할 수 있다.

5.9.x 시리즈에 추가된 재귀 제어 동사도 지원하지 않는다.

3. 5. 재귀 깊이 제한

PCRE는 재귀 깊이에 제한이 있지만, 은 제한이 없다.

참조

[1] 문서
[2] 문서
[3] 문서
[4] 문서
[5] 문서
[6] 문서
[7] 문서
[8] 문서
[9] 문서
[10] 문서
[11] 웹사이트 "[pcre-dev] Final release of PCRE1" https://lists.exim.o[...] 2023-07-21
[12] 웹사이트 licence.txt http://www.pcre.org/[...] 2009-05-31
[13] 웹사이트 PCRE - Perl Compatible Regular Expressions http://www.pcre.org/ 2009-05-31
[14] 웹사이트 Overview of new features in Apache 2.2 http://httpd.apache.[...] 2009-05-31
[15] 웹사이트 Postfix PCRE Support http://www.postfix.o[...] 2009-05-31
[16] 웹사이트 Module pcre http://nmap.org/nsed[...] 2009-05-31
[17] 웹사이트 Safari 3 Beta Update 3.0.3 のセキュリティコンテンツについて http://support.apple[...] 2009-05-31
[18] 웹사이트 maildropfilter http://www.courier-m[...] 2009-05-31
[19] 웹인용 Index of /pub/pcre/ https://web.archive.[...] 2018-04-26
[20] 문서 Exim and PCRE: How free software hijacked my life http://www.ukuug.org[...] 필립 하젤 1999-12
[21] 웹인용 PCRE - Perl-compatible regular expressions http://www.pcre.org/[...] 케임브리지 대학교



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com