다음에서 제공하는 패턴 일치에 대한 세 가지 접근 방식이 있습니다.포스트그레SQL: 전통SQL 좋아요연산자, 더 최근의 것유사함연산자(SQL:1999에 추가됨) 및POSIX-스타일 정규식. 기본을 제외하고“이 스포츠 토토 베트맨열이 이 패턴과 일치합니까?”연산자, 일치하는 하위 스포츠 토토 베트맨열을 추출 또는 교체하고 일치하는 위치에서 스포츠 토토 베트맨열을 분할하는 함수를 사용할 수 있습니다.
이를 넘어서는 패턴 일치가 필요한 경우 Perl 또는 Tcl로 사용자 정의 함수 작성을 고려하십시오.
대부분의 정규식 검색은 매우 빠르게 실행될 수 있지만, 처리하는 데 임의의 시간과 메모리가 소요되는 정규식을 고안할 수 있습니다. 적대적인 소스로부터 정규 표현식 검색 패턴을 받아들이는 것을 주의하세요. 꼭 그렇게 해야 한다면 명령문 시간 초과를 적용하는 것이 좋습니다.
다음을 사용하여 검색유사함패턴에는 동일한 보안 위험이 있습니다. 이후유사함다음과 동일한 기능을 많이 제공합니다.POSIX-스타일 정규식.
좋아요검색은 다른 두 옵션보다 훨씬 간단하므로 적대적일 수 있는 패턴 소스와 함께 사용하는 것이 더 안전합니다.
세 가지 종류의 패턴 일치 연산자는 모두 비결정적 데이터 정렬을 지원하지 않습니다. 필요한 경우 이 제한 사항을 해결하려면 표현식에 다른 데이터 정렬을 적용하세요.
좋아요스포츠 토토 베트맨열좋아요패턴[탈출이스케이프 스포츠 토토 베트맨]스포츠 토토 베트맨열좋아하지 않음패턴[탈출이스케이프 스포츠 토토 베트맨]
그좋아요표현식은 다음과 같은 경우 true를 반환합니다.스포츠 토토 베트맨열제공된 내용과 일치패턴. (예상대로,좋아하지 않음다음의 경우 표현식이 false를 반환합니다.좋아요은 true를 반환하고 그 반대도 마찬가지입니다. 동등한 표현은 다음과 같습니다.아님 (.)스포츠 토토 베트맨열좋아요패턴)
만약패턴퍼센트 기호나 밑줄이 포함되어 있지 않으면 패턴은 스포츠 토토 베트맨열 자체만 나타냅니다. 그 경우에는좋아요동등 연산자처럼 작동합니다. 밑줄(_) in패턴는 모든 단일 스포츠 토토 베트맨를 나타냅니다(일치). 퍼센트 기호(%)는 0개 이상의 스포츠 토토 베트맨 시퀀스와 일치합니다.
일부 예:
'abc' LIKE 'abc'참'abc' LIKE 'a%'참'abc' LIKE '_b_'참'abc' LIKE 'c'거짓
좋아요패턴 일치는 항상 전체 스포츠 토토 베트맨열을 포함합니다. 따라서 스포츠 토토 베트맨열 내의 어느 위치에서든 시퀀스와 일치시키려면 패턴이 백분율 기호로 시작하고 끝나야 합니다.
다른 스포츠 토토 베트맨와 일치하지 않고 리터럴 밑줄 또는 백분율 기호와 일치시키려면,패턴앞에 이스케이프 스포츠 토토 베트맨가 와야 합니다. 기본 이스케이프 스포츠 토토 베트맨는 백슬래시이지만를 사용하여 다른 스포츠 토토 베트맨를 선택할 수 있습니다.탈출절. 이스케이프 스포츠 토토 베트맨 자체를 일치시키려면 두 개의 이스케이프 스포츠 토토 베트맨를 작성하세요.
있다면standard_conforming_strings해제하면 리터럴 스포츠 토토 베트맨열 상수에 쓰는 모든 백슬래시를 두 배로 늘려야 합니다. 보다섹션 4.1.2.1더 많은 정보를 원하시면.
글을 써서 이스케이프 스포츠 토토 베트맨를 선택하지 않는 것도 가능합니다탈출 ''. 이는 이스케이프 메커니즘을 효과적으로 비활성화하여 패턴에서 밑줄 및 백분율 기호의 특별한 의미를 끌 수 없게 만듭니다.
SQL 표준에 따르면 생략탈출이스케이프 스포츠 토토 베트맨가 없고(기본값은 백슬래시가 아님) 길이가 0임을 의미합니다.탈출값이 허용되지 않습니다.PostgreSQL16935_16998
핵심 단어좋아요대신 사용할 수 있습니다.좋아요활성 로케일에 따라 대소스포츠 토토 베트맨를 구분하지 않고 일치하도록 만듭니다. 이것은에 없습니다.SQL표준이지만 a포스트그레SQL확장.
운영자~~다음과 동일함좋아요및~~*다음에 해당함좋아요. 또한 있습니다!~~그리고!~~*표현하는 연산자좋아하지 않음그리고닮지 않음입니다. 이 연산자는 모두 다음과 같습니다.PostgreSQL-특정. 다음 연산자 이름을 볼 수 있습니다.설명파서가 실제로 번역하기 때문에 출력 및 유사한 장소좋아요외. 이 운영자에게.
문구좋아요, 좋아요, 좋아하지 않음및닮지 않음일반적으로 연산자로 취급됩니다.포스트그레SQL구문; 예를 들어 다음에서 사용할 수 있습니다.표현 연산자모두(하위 쿼리)는 구성하지만탈출절은 여기에 포함될 수 없습니다. 일부 모호한 경우에는 기본 연산자 이름을 대신 사용해야 할 수도 있습니다.
접두사 연산자도 참조^@및 해당start_with함수는 단순히 스포츠 토토 베트맨열의 시작 부분을 일치시키는 것이 필요한 경우에 유용합니다.
유사함정규 표현식스포츠 토토 베트맨열유사함패턴[탈출이스케이프 스포츠 토토 베트맨]스포츠 토토 베트맨열다음과 유사하지 않음패턴[탈출이스케이프 스포츠 토토 베트맨]
그유사함연산자는 패턴이 주어진 스포츠 토토 베트맨열과 일치하는지 여부에 따라 true 또는 false를 반환합니다. 와 비슷합니다.좋아요, 단, SQL 표준의 정규식 정의를 사용하여 패턴을 해석한다는 점은 다릅니다. SQL 정규식은 다음과 같은 흥미로운 교차점입니다.좋아요표기법 및 공통(POSIX) 정규식 표기법.
좋아요좋아요, 그유사함연산자는 해당 패턴이 전체 스포츠 토토 베트맨열과 일치하는 경우에만 성공합니다. 이는 패턴이 스포츠 토토 베트맨열의 어떤 부분과도 일치할 수 있는 일반적인 정규식 동작과 다릅니다. 또한 좋아요좋아요, 유사함사용_그리고%각각 단일 스포츠 토토 베트맨와 스포츠 토토 베트맨열을 나타내는 와일드카드 스포츠 토토 베트맨(이것들은.그리고.*POSIX 정규식에서).
빌린 시설 외에도좋아요, 유사함POSIX 정규 표현식에서 빌린 다음 패턴 일치 메타 스포츠 토토 베트맨를 지원합니다.
|교대(두 가지 대안 중 하나)를 나타냅니다.
*이전 항목이 0회 이상 반복됨을 나타냅니다.
+이전 항목이 한 번 이상 반복됨을 나타냅니다.
?이전 항목이 0회 또는 1회 반복됨을 나타냅니다.
{m}이전 항목이 정확히 반복됨을 나타냄m회.
{m,}이전 항목의 반복을 나타냅니다.m또는 그 이상.
{m,n}적어도 이전 항목의 반복을 나타냄m최대n회.
괄호()항목을 단일 논리 항목으로 그룹화하는 데 사용할 수 있습니다.
괄호 표현식[...]POSIX 정규 표현식과 마찬가지로 스포츠 토토 베트맨 클래스를 지정합니다.
마침표(.)은의 메타스포츠 토토 베트맨가 아닙니다.유사함.
다음과 같이좋아요, 백슬래시는 이러한 메타 스포츠 토토 베트맨의 특별한 의미를 비활성화합니다. 다음을 사용하여 다른 이스케이프 스포츠 토토 베트맨를 지정할 수 있습니다.탈출또는 다음을 작성하여 이스케이프 기능을 비활성화할 수 있습니다.탈출 ''.
SQL 표준에 따르면 생략탈출이스케이프 스포츠 토토 베트맨가 없고(기본값은 백슬래시가 아님) 길이가 0임을 의미합니다.탈출값이 허용되지 않습니다.PostgreSQL23789_23852
또 다른 비표준 확장은 스포츠 토토 베트맨나 숫자가 포함된 이스케이프 스포츠 토토 베트맨 다음에 POSIX 정규 표현식에 정의된 이스케이프 시퀀스에 대한 액세스를 제공한다는 것입니다. 보다표 9.20, 표 9.21및표 9.22아래.
일부 예:
'abc'는 'abc'와 유사참'abc' 'a'와 유사거짓'abc' '%(b|d)%'와 유사함참'abc'는 '(b|c)%'와 유사함거짓'-abc-' '%\mabc\M%'와 유사참'xabcy'는 '%\mabc\M%'와 유사합니다.거짓
그하위 스포츠 토토 베트맨열25321_25492
하위 스포츠 토토 베트맨열(스포츠 토토 베트맨열from패턴for이스케이프 스포츠 토토 베트맨)
또는 일반 3인수 함수로:
하위 스포츠 토토 베트맨열(스포츠 토토 베트맨열,패턴,이스케이프 스포츠 토토 베트맨)
와 마찬가지로유사함, 지정된 패턴은 전체 데이터 스포츠 토토 베트맨열과 일치해야 합니다. 그렇지 않으면 함수가 실패하고 null을 반환합니다. 일치하는 데이터 하위 스포츠 토토 베트맨열이 관심 있는 패턴 부분을 나타내려면 패턴에 두 개의 이스케이프 스포츠 토토 베트맨와 큰따옴표()가 포함되어야 합니다."). 일치가 성공하면 이러한 구분 기호 사이의 패턴 부분과 일치하는 텍스트가 반환됩니다.
이스케이프-큰따옴표 구분 기호는 실제로 나눕니다.하위 스포츠 토토 베트맨열'의 패턴을 세 개의 독립적인 정규식으로 변환합니다. 예를 들어 세로 막대(|) 세 섹션 중 하나는 해당 섹션에만 영향을 미칩니다. 또한 이러한 정규 표현식의 첫 번째와 세 번째는 데이터 스포츠 토토 베트맨열이 어떤 패턴과 일치하는지 모호한 경우 최대 텍스트가 아닌 가능한 최소 텍스트 양과 일치하도록 정의됩니다. (POSIX 용어로 첫 번째와 세 번째 정규식은 non-greedy가 되도록 강제됩니다.)
SQL 표준의 확장으로서,PostgreSQL이스케이프-큰따옴표 구분 기호가 하나만 있을 수 있도록 허용합니다. 이 경우 세 번째 정규 표현식은 빈 것으로 간주됩니다. 또는 구분 기호가 없는 경우 첫 번째와 세 번째 정규 표현식은 빈 것으로 간주됩니다.
몇 가지 예, 다음과 함께#"반환 스포츠 토토 베트맨열 구분:
하위 스포츠 토토 베트맨열('#'에 대해 '%#"o_b#"%'의 'foobar'))oob하위 스포츠 토토 베트맨열('#'에 대한 '#"o_b#"%'의 'foobar')NULL
표 9.16POSIX 정규식을 사용하여 패턴 일치에 사용할 수 있는 연산자를 나열합니다.
표 9.16. 정규식 일치 연산자
|
운영자 설명 예제 |
|---|
|
스포츠 토토 베트맨열은 정규식과 일치하며 대소스포츠 토토 베트맨를 구분합니다.
|
|
스포츠 토토 베트맨열은 정규식과 일치하며 대소스포츠 토토 베트맨를 구분하지 않습니다.
|
|
스포츠 토토 베트맨열은 정규 표현식과 일치하지 않습니다. 대소스포츠 토토 베트맨를 구분합니다.
|
|
스포츠 토토 베트맨열은 정규 표현식과 일치하지 않습니다. 대소스포츠 토토 베트맨를 구분하지 않습니다.
|
POSIX정규 표현식은 패턴 일치를 위한 더 강력한 수단을 제공합니다.좋아요그리고유사함연산자. 다음과 같은 많은 Unix 도구이그레프, sed또는awk여기에 설명된 것과 유사한 패턴 일치 언어를 사용하세요.
정규 표현식은 스포츠 토토 베트맨열 집합의 축약된 정의인 스포츠 토토 베트맨 시퀀스입니다(a일반 세트). 스포츠 토토 베트맨열이 정규식으로 설명되는 정규 집합의 구성원인 경우 정규식과 일치한다고 합니다. 마찬가지로좋아요, 패턴 스포츠 토토 베트맨는 정규식 언어의 특수 스포츠 토토 베트맨가 아닌 한 스포츠 토토 베트맨열 스포츠 토토 베트맨와 정확하게 일치합니다. 그러나 정규식은 다음과 다른 특수 스포츠 토토 베트맨를 사용합니다.좋아요그렇습니다. 같지 않은좋아요patterns, 정규식이 스포츠 토토 베트맨열의 시작이나 끝에 명시적으로 고정되지 않는 한 정규식은 스포츠 토토 베트맨열 내의 어느 위치에서나 일치할 수 있습니다.
일부 예:
'abcd' ~ 'bc'참'abcd' ~ 'a.c'true — 점은 모든 스포츠 토토 베트맨와 일치합니다.'abcd' ~ 'a.*d'참 —*이전 패턴 항목을 반복합니다'abcd' ~ '(b|x)'참 —|OR, 괄호 그룹을 의미'abcd' ~ '^a'참 —^스포츠 토토 베트맨열 시작에 대한 앵커'abcd' ~ '^(b|c)'false — 앵커링을 제외하고 일치합니다.
그POSIX패턴 언어는 아래에 훨씬 더 자세히 설명되어 있습니다.
그하위 스포츠 토토 베트맨열두 개의 매개변수가 있는 함수하위 스포츠 토토 베트맨열(, POSIX 정규식 패턴과 일치하는 하위 스포츠 토토 베트맨열 추출을 제공합니다. 일치하는 항목이 없으면 null을 반환하고, 그렇지 않으면 패턴과 일치하는 텍스트의 첫 번째 부분을 반환합니다. 그러나 패턴에 괄호가 포함된 경우 첫 번째 괄호로 묶인 하위 표현식(왼쪽 괄호가 먼저 오는 하위 표현식)과 일치하는 텍스트 부분이 반환됩니다. 이 예외를 트리거하지 않고 표현식 내에서 괄호를 사용하려면 전체 표현식 주위에 괄호를 넣을 수 있습니다. 추출하려는 하위 표현식 앞의 패턴에 괄호가 필요한 경우 아래 설명된 비캡처 괄호를 참조하세요.스포츠 토토 베트맨열에서패턴)
몇 가지 예:
하위 스포츠 토토 베트맨열('o.b'의 'foobar')oobsubstring('o(.)b'의 'foobar')o
그regexp_replace함수는 POSIX 정규 표현식 패턴과 일치하는 하위 스포츠 토토 베트맨열에 대한 새 텍스트 대체를 제공합니다. 구문은 다음과 같습니다.regexp_replace(출처, 패턴, 교체 [, 플래그]). 그만큼출처스포츠 토토 베트맨열은 일치하는 항목이 없으면 변경되지 않고 반환됩니다.패턴. 일치하는 것이 있으면,출처스포츠 토토 베트맨열은와 함께 반환됩니다.교체스포츠 토토 베트맨열이 일치하는 하위 스포츠 토토 베트맨열로 대체되었습니다. 그만큼교체스포츠 토토 베트맨열은 다음을 포함할 수 있음\n, 여기서n은 1부터 9까지이며, 소스 하위 스포츠 토토 베트맨열이n'번째 괄호로 묶인 패턴의 하위 표현식을 삽입해야 하며 다음을 포함할 수 있습니다.\&전체 패턴과 일치하는 하위 스포츠 토토 베트맨열이 삽입되어야 함을 나타냅니다. 쓰다\\교체 텍스트에 리터럴 백슬래시를 넣어야 하는 경우. 그만큼플래그매개변수는 함수의 동작을 변경하는 0개 이상의 단일 스포츠 토토 베트맨 플래그를 포함하는 선택적 텍스트 스포츠 토토 베트맨열입니다. 깃발i대소스포츠 토토 베트맨를 구분하지 않는 일치를 지정하고 플래그g은 첫 번째 스포츠 토토 베트맨열만이 아닌 일치하는 각 하위 스포츠 토토 베트맨열의 교체를 지정합니다. 지원되는 플래그(그렇지는 않지만)g)는에 설명되어 있습니다.표 9.24.
일부 예:
regexp_replace('foobarbaz', 'b..', 'X')fooXbazregexp_replace('foobarbaz', 'b..', 'X', 'g')fooXXregexp_replace('foobarbaz', 'b(..)', 'X\1Y', 'g')fooXarYXazY
그regexp_match함수는 POSIX 정규식 패턴과 스포츠 토토 베트맨열의 첫 번째 일치로 인해 캡처된 하위 스포츠 토토 베트맨열의 텍스트 배열을 반환합니다. 구문은 다음과 같습니다.regexp_match(스포츠 토토 베트맨열, 패턴 [, 플래그]). 일치하는 항목이 없으면 결과는 다음과 같습니다.NULL. 일치하는 항목이 발견되면,패턴괄호로 묶은 하위 표현식이 없으면 결과는 전체 패턴과 일치하는 하위 스포츠 토토 베트맨열을 포함하는 단일 요소 텍스트 배열입니다. 일치하는 항목이 발견되면,패턴괄호로 묶인 하위 표현식을 포함하는 경우 결과는 텍스트 배열입니다.n'번째 요소는와 일치하는 하위 스포츠 토토 베트맨열입니다.n'의 괄호로 묶인 하위 표현식패턴(계산되지 않음“비캡처”괄호; 자세한 내용은 아래를 참조하세요). 그만큼플래그매개변수는 함수의 동작을 변경하는 0개 이상의 단일 스포츠 토토 베트맨 플래그를 포함하는 선택적 텍스트 스포츠 토토 베트맨열입니다. 지원되는 플래그는에 설명되어 있습니다.표 9.24.
일부 예:
SELECT regexp_match('foobarbequebaz', 'bar.*que');
정규 표현식_일치
--------------
바비큐
전체 일치 하위 스포츠 토토 베트맨열을 원하는 일반적인 경우 또는NULL일치하는 항목이 없으면 다음과 같이 작성하세요.
SELECT (regexp_match('foobarbequebaz', 'bar.*que'))[1];
정규 표현식_일치
--------------
바베큐
(1행)
그regexp_matches함수는 POSIX 정규 표현식 패턴을 스포츠 토토 베트맨열과 일치시켜 얻은 캡처된 하위 스포츠 토토 베트맨열의 텍스트 배열 세트를 반환합니다. 다음과 같은 구문을 갖습니다.regexp_match. 이 함수는 일치하는 항목이 없으면 행을 반환하지 않고, 일치하는 항목이 있으면 하나의 행을 반환하며,g플래그가 제공되지 않거나N행이 있는 경우N일치 및g플래그가 주어졌습니다. 반환된 각 행은 일치하는 전체 하위 스포츠 토토 베트맨열 또는 괄호로 묶인 하위 표현식과 일치하는 하위 스포츠 토토 베트맨열을 포함하는 텍스트 배열입니다.패턴, 위에서 설명한 대로regexp_match. regexp_matches다음에 표시된 모든 플래그를 수락합니다.표 9.24, 그리고g첫 번째 일치 항목뿐만 아니라 모든 일치 항목을 반환하도록 명령하는 플래그.
일부 예:
SELECT regexp_matches('foo', '거기 없음');
정규 표현식_일치
----------------
(0행)
SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
정규 표현식_일치
----------------
바,베크
바질,바르프
대부분의 경우regexp_matches()다음과 함께 사용해야 합니다g플래그, 첫 번째 일치만 원하는 경우 사용이 더 쉽고 효율적이므로regexp_match(). 하지만,regexp_match()다음에만 존재함포스트그레SQL버전 10 이상. 이전 버전에서 작업할 때 일반적인 방법은 다음을 배치하는 것입니다.regexp_matches()하위 선택 호출, 예:
SELECT col1, (SELECT regexp_matches(col2, '(bar)(beque)')) FROM 탭;
일치하는 것이 있으면 텍스트 배열을 생성합니다. 또는NULL그렇지 않다면 다음과 같습니다regexp_match()그렇습니다. 하위 선택이 없으면 이 쿼리는 일치 항목이 없는 테이블 행에 대해 전혀 출력을 생성하지 않습니다. 이는 일반적으로 원하는 동작이 아닙니다.
그regexp_split_to_table함수는 POSIX 정규식 패턴을 구분 기호로 사용하여 스포츠 토토 베트맨열을 분할합니다. 구문은 다음과 같습니다.regexp_split_to_table(스포츠 토토 베트맨열, 패턴 [, 플래그]). 와 일치하는 항목이 없는 경우패턴, 함수는 다음을 반환합니다.스포츠 토토 베트맨열. 일치하는 항목이 하나 이상 있는 경우 각 일치 항목에 대해 마지막 일치 항목의 끝(또는 스포츠 토토 베트맨열의 시작 부분)부터 일치 항목의 시작 부분까지의 텍스트를 반환합니다. 더 이상 일치하는 항목이 없으면 마지막 일치 항목의 끝부터 스포츠 토토 베트맨열 끝까지의 텍스트를 반환합니다. 그만큼플래그매개변수는 함수의 동작을 변경하는 0개 이상의 단일 스포츠 토토 베트맨 플래그를 포함하는 선택적 텍스트 스포츠 토토 베트맨열입니다.regexp_split_to_table에 설명된 플래그를 지원합니다.표 9.24.
그regexp_split_to_array함수는 다음과 동일하게 동작합니다regexp_split_to_table, 그 외에는regexp_split_to_array결과를 배열로 반환합니다.텍스트. 구문은 다음과 같습니다.regexp_split_to_array(스포츠 토토 베트맨열, 패턴 [, 플래그]). 매개변수는 와 동일합니다.regexp_split_to_table.
일부 예:
SELECT foo FROM regexp_split_to_table('빠른 갈색 여우가 게으른 개 위로 점프합니다', '\s+') AS foo;
푸
-------
그만큼
빠른
갈색
여우
점프
~ 위에
그만큼
게으른
개
(9열)
SELECT regexp_split_to_array('빠른 갈색 여우가 게으른 개 위로 뛰어오르다', '\s+');
regexp_split_to_array
----------------------------------
the,quick,brown,fox,jumps,over,the,lazy,dog
마지막 예에서 볼 수 있듯이 정규식 분할 함수는 스포츠 토토 베트맨열의 시작이나 끝 또는 이전 일치 직후에 발생하는 길이가 0인 일치를 무시합니다. 이는 다음으로 구현되는 정규 표현식 일치의 엄격한 정의에 위배됩니다.regexp_match그리고regexp_matches이지만 실제로는 일반적으로 가장 편리한 동작입니다. Perl과 같은 다른 소프트웨어 시스템도 비슷한 정의를 사용합니다.
PostgreSQL의 정규식은 Henry Spencer가 작성한 소프트웨어 패키지를 사용하여 구현됩니다. 아래 정규식에 대한 설명의 대부분은 그의 매뉴얼에서 그대로 복사되었습니다.
정규식 (REs)(에 정의됨)POSIX1003.2, 두 가지 형식으로 제공됩니다.확장 REs 또는EREs (대략이그레프) 및기본 RE또는BREs (대략 다음의 것ed). PostgreSQL두 가지 형식을 모두 지원하고 POSIX 표준에는 없지만 Perl 및 Tcl과 같은 프로그래밍 언어에서의 가용성으로 인해 널리 사용되는 일부 확장도 구현합니다.RE이 POSIX가 아닌 확장을 사용하는 것이 호출됩니다.고급 RE또는ARE이 문서에 있습니다. ARE는 ERE의 거의 정확한 상위 집합이지만 BRE에는 몇 가지 표기법상 비호환성이 있습니다(또한 훨씬 더 제한적임). 먼저 ARE에만 적용되는 기능을 언급하면서 ARE 및 ERE 형식을 설명한 다음 BRE가 어떻게 다른지 설명합니다.
PostgreSQL항상 처음에는 정규 표현식이 ARE 규칙을 따른다고 가정합니다. 그러나 더 제한된 ERE 또는 BRE 규칙은 앞에 추가하여 선택할 수 있습니다.내장 옵션에 설명된 대로 RE 패턴에섹션 9.7.3.4. 이는 정확히 다음을 기대하는 애플리케이션과의 호환성에 유용할 수 있습니다.POSIX1003.2 규칙.
정규 표현식은 하나 이상으로 정의됩니다.분기, 다음으로 구분됨|. 브랜치 중 하나와 일치하는 모든 항목과 일치합니다.
분기가 0개 이상입니다.정량화된 원자또는제약조건, 연결되었습니다. 첫 번째 일치 항목과 일치하고 두 번째 일치 항목이 뒤따릅니다. 빈 분기는 빈 스포츠 토토 베트맨열과 일치합니다.
정량화된 원자는원자아마도 단일이 올 수 있음수량자. 수량자가 없으면 원자와 일치하는 항목과 일치합니다. 수량자를 사용하면 원자의 일부 일치 항목과 일치할 수 있습니다. 안원자다음에 표시된 가능성 중 하나일 수 있습니다.표 9.17. 가능한 수량자와 그 의미는 다음과 같습니다.표 9.18.
A 제약빈 스포츠 토토 베트맨열과 일치하지만 특정 조건이 충족되는 경우에만 일치합니다. 제약조건은 원자가 사용될 수 있는 곳에서 사용될 수 있습니다. 단, 뒤에 수량자가 올 수는 없습니다. 간단한 제약 조건은 다음과 같습니다.표 9.19; 몇 가지 추가 제약 조건은 나중에 설명됩니다.
표 9.17. 정규식 원자
| 아톰 | 설명 |
|---|---|
(다시) |
(어디에서다시모든 정규 표현식)은 다음과 일치합니다.다시, 가능한 보고를 위해 일치 항목이 언급됨 |
(?:다시) |
위와 같지만 일치 항목은 보고용으로 기록되지 않습니다. (a“비캡처”괄호 세트) (ARE에만 해당) |
. |
모든 단일 스포츠 토토 베트맨와 일치 |
[스포츠 토토 베트맨] |
a 괄호 표현식, 다음 중 하나와 일치함스포츠 토토 베트맨(참조섹션 9.7.3.2자세한 내용은) |
\k |
(어디에서k는 영숫자가 아닌 스포츠 토토 베트맨입니다)는 일반 스포츠 토토 베트맨로 간주되는 해당 스포츠 토토 베트맨와 일치합니다. 예:\\백슬래시 스포츠 토토 베트맨와 일치 |
\c |
어디에서c영숫자(다른 스포츠 토토 베트맨가 뒤따를 수 있음)는탈출, 참조섹션 9.7.3.3(ARE 전용; ERE 및 BRE에서는 일치함c) |
{ |
뒤에 숫자 이외의 스포츠 토토 베트맨가 오면 왼쪽 중괄호 스포츠 토토 베트맨와 일치합니다.{; 뒤에 숫자가 오면 a의 시작입니다.바운드(아래 참조) |
x |
어디에서x다른 의미가 없는 단일 스포츠 토토 베트맨이며 해당 스포츠 토토 베트맨와 일치합니다. |
RE는 백슬래시로 끝날 수 없습니다(\).
있다면standard_conforming_strings해제하면 리터럴 스포츠 토토 베트맨열 상수에 쓰는 모든 백슬래시를 두 배로 늘려야 합니다. 보다섹션 4.1.2.1더 많은 정보를 원하시면.
표 9.18. 정규식 수량자
| 정량자 | 일치 |
|---|---|
* |
원자와 일치하는 0개 이상의 시퀀스 |
+ |
1개 이상의 원자 일치 시퀀스 |
? |
원자와 일치하는 0 또는 1개의 시퀀스 |
{m} |
정확히 일련의m원자 일치 |
{m,} |
일련의m또는 그 이상의 원자 일치 |
{m,n} |
일련의m통해n(포함) 원자 일치;m초과할 수 없습니다n |
*? |
탐욕스럽지 않은 버전* |
+? |
탐욕스럽지 않은 버전+ |
?? |
탐욕스럽지 않은 버전? |
{m}? |
탐욕스럽지 않은 버전{m} |
{m,}? |
탐욕스럽지 않은 버전{m,} |
{m,n}? |
탐욕스럽지 않은 버전{m,n} |
다음을 사용하는 양식{...}다음으로 알려져 있음경계. 숫자m그리고n범위 내에는 0부터 255까지 허용되는 값을 갖는 부호 없는 십진 정수가 있습니다.
욕심 없음양자(ARE에서만 사용 가능)는 해당 법선과 동일한 가능성과 일치합니다(탐욕스러운) 대응 항목이지만 가장 큰 일치 항목 수보다는 가장 작은 숫자를 선호합니다. 보다섹션 9.7.3.5자세한 내용은.
한 수량자는 다른 수량자 바로 뒤에 올 수 없습니다. 예:**잘못되었습니다. 수량자는 표현식이나 하위 표현식을 시작하거나 따를 수 없습니다.^또는|.
표 9.19. 정규식 제약 조건
| 제약 | 설명 |
|---|---|
^ |
스포츠 토토 베트맨열의 시작 부분과 일치 |
$ |
스포츠 토토 베트맨열 끝에서 일치 |
(?=레) |
긍정적인 예측하위 스포츠 토토 베트맨열이 일치하는 모든 지점에서 일치합니다.레시작(ARE에만 해당) |
(?!다시) |
부정적 예측부분 스포츠 토토 베트맨열이 일치하지 않는 모든 지점에서 일치합니다.다시시작(ARE에만 해당) |
(?<=다시) |
긍정적인 뒷모습하위 스포츠 토토 베트맨열이 일치하는 모든 지점에서 일치합니다.다시종료(ARE에만 해당) |
(?<!레) |
부정적 뒤돌아보기부분 스포츠 토토 베트맨열이 일치하지 않는 모든 지점에서 일치합니다.레종료(ARE에만 해당) |
Lookahead 및 Lookbehind 제약 조건은 다음을 포함할 수 없습니다.역참조(참조섹션 9.7.3.3), 그 안의 모든 괄호는 비캡처로 간주됩니다.
A 괄호 표현식은 안에 포함된 스포츠 토토 베트맨 목록입니다.[]. 일반적으로 목록의 단일 스포츠 토토 베트맨와 일치합니다(아래 참조). 목록이로 시작하는 경우^, 모든 단일 스포츠 토토 베트맨와 일치합니다.아님나머지 목록에서. 목록의 두 스포츠 토토 베트맨가로 구분된 경우-, 이는 조합 순서에서 두 스포츠 토토 베트맨(포함) 사이의 전체 스포츠 토토 베트맨 범위를 나타내는 약어입니다. 예:[0-9]에ASCII모든 십진수와 일치합니다. 두 범위가 끝점을 공유하는 것은 불법입니다. 예:a-c-e. 범위는 배열 순서에 크게 의존하므로 이식 가능한 프로그램은 범위에 의존하지 않아야 합니다.
리터럴을 포함하려면]목록에서 첫 번째 스포츠 토토 베트맨로 만드세요(다음에^(사용되는 경우)). 리터럴을 포함하려면-, 범위의 첫 번째 또는 마지막 스포츠 토토 베트맨 또는 두 번째 끝점으로 만듭니다. 리터럴을 사용하려면-범위의 첫 번째 끝점으로 묶습니다.[.그리고.]조합 요소로 만듭니다(아래 참조). 이러한 스포츠 토토 베트맨를 제외한 일부 조합은[(다음 단락 참조) 및 이스케이프(ARE에만 해당), 기타 모든 특수 스포츠 토토 베트맨는 대괄호 표현식 내에서 특별한 의미를 잃습니다. 특히,\ERE 또는 BRE 규칙을 따를 때는 특별하지 않지만 ARE에서는 (이스케이프를 도입하는 등) 특별합니다.
괄호 표현식 내에서 조합 요소(스포츠 토토 베트맨, 단일 스포츠 토토 베트맨인 것처럼 조합하는 다중 스포츠 토토 베트맨 시퀀스 또는 둘 중 하나에 대한 조합 시퀀스 이름)는[.그리고.]은 해당 조합 요소의 스포츠 토토 베트맨 시퀀스를 나타냅니다. 시퀀스는 대괄호 표현식 목록의 단일 요소로 처리됩니다. 이를 통해 여러 스포츠 토토 베트맨 조합 요소를 포함하는 대괄호 표현식이 두 개 이상의 스포츠 토토 베트맨와 일치할 수 있습니다(예: 조합 순서에 가 포함된 경우).ch조합 요소, 그 다음 RE[[.ch.]]*c다음의 처음 5개 스포츠 토토 베트맨와 일치합니다.chchcc.
PostgreSQL현재 다중 스포츠 토토 베트맨 조합 요소를 지원하지 않습니다. 이 정보는 향후 발생할 수 있는 동작을 설명합니다.
괄호 표현식 내에서 조합 요소는[=그리고=]은동등 클래스는 자신을 포함하여 해당 요소와 동등한 모든 조합 요소의 스포츠 토토 베트맨 시퀀스를 나타냅니다. (다른 동등한 조합 요소가 없는 경우, 둘러싸는 구분 기호가 있는 것처럼 처리됩니다.[.그리고.].) 예를 들어, 만약o그리고^동등한 클래스의 멤버라면[[=o=]], [[=^=]]및[o^]모두 동의어입니다. 동등 클래스는 범위의 끝점이 될 수 없습니다.
괄호 표현식 내에서 스포츠 토토 베트맨 클래스의 이름은[:그리고:]은 해당 클래스에 속하는 모든 캐릭터의 목록을 나타냅니다. 스포츠 토토 베트맨 클래스는 범위의 끝점으로 사용할 수 없습니다. 그만큼POSIX표준은 다음 스포츠 토토 베트맨 클래스 이름을 정의합니다.알넘(스포츠 토토 베트맨 및 숫자),알파(스포츠 토토 베트맨),공백(스페이스 및 탭),컨트롤(제어 스포츠 토토 베트맨),자리(숫자),그래프(공백을 제외하고 인쇄 가능한 스포츠 토토 베트맨),하위(소스포츠 토토 베트맨),인쇄(공백을 포함하여 인쇄 가능한 스포츠 토토 베트맨),점점(구두점),공간(모든 공백),상위(대스포츠 토토 베트맨) 및xdigit(16진수). 이러한 표준 스포츠 토토 베트맨 클래스의 동작은 일반적으로 7비트 ASCII 세트의 스포츠 토토 베트맨에 대해 플랫폼 전체에서 일관됩니다. 지정된 비ASCII 스포츠 토토 베트맨가 이러한 클래스 중 하나에 속하는 것으로 간주되는지 여부는 다음과 같습니다.조합정규식 함수 또는 연산자에 사용됩니다(참조섹션 23.2) 또는 기본적으로 데이터베이스의LC_CTYPE로케일 설정(참조PostgreSQL : 문서 : 13 : 23.1. 토토 핫 지원). ASCII가 아닌 스포츠 토토 베트맨의 분류는 비슷한 이름의 로케일에서도 플랫폼에 따라 다를 수 있습니다. (그러나C로케일은 ASCII가 아닌 스포츠 토토 베트맨가 이러한 클래스에 속하는 것으로 간주하지 않습니다.) 이러한 표준 스포츠 토토 베트맨 클래스 외에도,PostgreSQL다음을 정의합니다ascii정확히 7비트 ASCII 세트를 포함하는 스포츠 토토 베트맨 클래스.
대괄호 표현식에는 두 가지 특별한 경우가 있습니다: 대괄호 표현식[[:<:]]그리고[[::]]는 단어의 시작과 끝에서 각각 빈 스포츠 토토 베트맨열과 일치하는 제약 조건입니다. 단어는 단어 스포츠 토토 베트맨의 앞이나 뒤에도 없는 일련의 단어 스포츠 토토 베트맨로 정의됩니다. 단어 스포츠 토토 베트맨는알넘스포츠 토토 베트맨(에 정의된 대로POSIX위에 설명된 스포츠 토토 베트맨 클래스) 또는 밑줄. 이것은 확장 프로그램이며 호환되지만 지정되지는 않습니다.POSIX1003.2이며 다른 시스템으로 이식할 수 있도록 고안된 소프트웨어에서는 주의해서 사용해야 합니다. 일반적으로 아래에 설명된 제약 조건 탈출이 더 좋습니다. 더 이상 표준은 아니지만 입력하기가 더 쉽습니다.
탈출다음으로 시작하는 특수 시퀀스입니다.\다음에 영숫자 스포츠 토토 베트맨가 옵니다. 이스케이프에는 스포츠 토토 베트맨 입력, 클래스 속기, 제약 조건 이스케이프, 역참조 등 다양한 종류가 있습니다. 에이\다음에 영숫자 스포츠 토토 베트맨가 오지만 유효한 이스케이프를 구성하지 않는 것은 ARE에서 불법입니다. ERE에는 이스케이프가 없습니다. 대괄호 표현식 외부에는 a\다음에 영숫자 스포츠 토토 베트맨가 오는 것은 해당 스포츠 토토 베트맨를 일반 스포츠 토토 베트맨로 나타내고 대괄호 표현식 안에는,\은 일반 스포츠 토토 베트맨입니다. (후자는 ERE와 ARE 간의 실제 비호환성 중 하나입니다.)
스포츠 토토 베트맨 입력 이스케이프RE에서 인쇄되지 않는 스포츠 토토 베트맨 및 기타 불편한 스포츠 토토 베트맨를 더 쉽게 지정할 수 있도록 하기 위해 존재합니다. 그들은에 표시됩니다표 9.20.
클래스 속기 이스케이프일반적으로 사용되는 특정 스포츠 토토 베트맨 클래스에 대한 약칭을 제공합니다. 그들은에 표시됩니다표 9.21.
A 제약조건 탈출은 특정 조건이 충족되면 빈 스포츠 토토 베트맨열과 일치하는 제약 조건이며 이스케이프로 작성됩니다. 그들은에 표시됩니다표 9.22.
A 역참조 (\n)은 숫자로 지정된 이전 괄호 안에 있는 하위 표현식과 일치하는 동일한 스포츠 토토 베트맨열과 일치합니다.n(참조표 9.23). 예를 들어,([bc])\1일치bb또는cc하지만 아님bc또는cb. 하위 표현식은 RE의 역참조보다 완전히 앞에 있어야 합니다. 하위 표현식은 선행 괄호 순서에 따라 번호가 매겨집니다. 비캡처 괄호는 하위 표현식을 정의하지 않습니다.
표 9.20. 정규식 스포츠 토토 베트맨 입력 이스케이프
| 탈출 | 설명 |
|---|---|
\a |
경고(벨) 스포츠 토토 베트맨, C와 동일 |
\b |
백스페이스, C에서와 같이 |
\B |
백슬래시의 동의어(\) 백슬래시 두 배의 필요성을 줄이는 데 도움이 됩니다. |
\cX |
(어디에서X임의의 스포츠 토토 베트맨) 하위 5비트가와 동일한 스포츠 토토 베트맨X, 다른 비트는 모두 0입니다. |
\e |
조합 순서 이름이 다음과 같은 스포츠 토토 베트맨ESC, 또는 실패하면 8진수 값을 가진 스포츠 토토 베트맨033 |
\f |
C에서와 같은 양식 피드 |
\n |
개행, C에서와 같이 |
\r |
C에서와 같은 캐리지 리턴 |
\t |
C에서와 같은 수평 탭 |
\uwxyz |
(어디에서wxyz은 정확히 4자리 16진수입니다.) 16진수 값이 다음과 같은 스포츠 토토 베트맨입니다.0xwxyz |
\Ustuvwxyz |
(어디에서stuvwxyz은 정확히 8자리 16진수입니다.) 16진수 값이 다음과 같은 스포츠 토토 베트맨입니다.0xstuvwxyz |
\v |
C와 같은 수직 탭 |
\x흐흐흐 |
(어디에서흐흐흐는 16진수 숫자의 시퀀스입니다) 16진수 값이 다음과 같은 스포츠 토토 베트맨입니다.0x흐흐(몇 개의 16진수를 사용하든 상관없이 단일 스포츠 토토 베트맨) |
\0 |
값이 다음과 같은 스포츠 토토 베트맨0(널 바이트) |
\xy |
(어디에서xy정확히 두 개의 8진수이며 a가 아닙니다.뒤로 참조) 8진수 값이 다음과 같은 스포츠 토토 베트맨0xy |
\xyz |
(어디에서xyz정확히 8진수 3자리이며 a가 아닙니다.뒤로 참조) 8진수 값이 다음과 같은 스포츠 토토 베트맨0xyz |
16진수는0-9, a-f및A-F. 8진수는 다음과 같습니다.0-7.
ASCII 범위(0-127) 외부의 값을 지정하는 숫자 스포츠 토토 베트맨 입력 이스케이프는 데이터베이스 인코딩에 따라 의미가 있습니다. 인코딩이 utf-8인 경우 이스케이프 값은 유니코드 코드 포인트와 동일합니다. 예를 들어\u1234스포츠 토토 베트맨를 의미합니다U+1234. 다른 멀티바이트 인코딩의 경우 스포츠 토토 베트맨 입력 이스케이프는 일반적으로 스포츠 토토 베트맨에 대한 바이트 값의 연결을 지정합니다. 이스케이프 값이 데이터베이스 인코딩의 유효한 스포츠 토토 베트맨와 일치하지 않으면 오류가 발생하지 않지만 어떤 데이터와도 일치하지 않습니다.
스포츠 토토 베트맨 입력 이스케이프는 항상 일반 스포츠 토토 베트맨로 간주됩니다. 예를 들어,\135is]ASCII이지만\135대괄호 표현식을 종료하지 않습니다.
표 9.21. 정규식 클래스 단축 이스케이프
| 탈출 | 설명 |
|---|---|
\d |
[[:숫자:]] |
\s |
[[:space:]] |
\w |
[[:alnum:]_](밑줄이 포함되어 있음) |
\D |
[^[:숫자:]] |
\S |
[^[:space:]] |
\W |
[^[:alnum:]_](밑줄이 포함되어 있음) |
괄호 표현식 내에서,\d, \s및\w바깥쪽 괄호를 잃어버리고\D, \S및\W불법입니다. (예를 들어,[a-c\d]다음과 동일함[a-c[:digit:]]. 또한,[a-c\D]은 다음과 같습니다.[a-c^[:숫자:]], 불법입니다.)
표 9.22. 정규식 제약 조건 이스케이프
| 탈출 | 설명 |
|---|---|
\A |
스포츠 토토 베트맨열의 시작 부분에서만 일치합니다(참조섹션 9.7.3.5이것이 어떻게 다른지^) |
\m |
단어의 시작 부분에서만 일치 |
\M |
단어 끝에서만 일치합니다. |
\y |
단어의 시작이나 끝에서만 일치합니다. |
\Y |
단어의 시작이나 끝이 아닌 지점에서만 일치합니다. |
\Z |
스포츠 토토 베트맨열 끝에서만 일치합니다(참조섹션 9.7.3.5이것이 다음과 어떻게 다른지$) |
단어는 다음의 사양에 정의되어 있습니다.[[:<:]]그리고[[::]]위. 제약 조건 이스케이프는 대괄호 표현식 내에서 불법입니다.
표 9.23. 정규식 역참조
| 탈출 | 설명 |
|---|---|
\m |
(어디에서m은 0이 아닌 숫자입니다)는에 대한 역참조입니다.m'번째 하위 표현식 |
\mnn |
(어디에서m은 0이 아닌 숫자이고nn자릿수가 더 많고 십진수 값입니다mnn은 지금까지 본 닫는 캡처 괄호의 수보다 크지 않습니다.)에 대한 역참조는mnn'번째 하위 표현식 |
8진수 스포츠 토토 베트맨 입력 이스케이프와 역참조 사이에는 본질적인 모호성이 있으며, 이는 위에서 암시한 것처럼 다음 휴리스틱으로 해결됩니다. 선행 0은 항상 8진수 이스케이프를 나타냅니다. 0이 아닌 숫자 하나 뒤에 다른 숫자가 나오지 않으면 항상 역참조로 간주됩니다. 0으로 시작하지 않는 여러 자리 수열은 적절한 하위 표현식 뒤에 오면(즉, 숫자가 역참조에 적합한 범위에 있는 경우) 역참조로 간주되고, 그렇지 않으면 8진수로 간주됩니다.
위에 설명된 기본 구문 외에도 몇 가지 특수 형식과 기타 구문 기능을 사용할 수 있습니다.
RE는 두 가지 특수 스포츠 토토 베트맨 중 하나로 시작할 수 있습니다.감독접두사. RE가로 시작하는 경우***:, 나머지 RE는 ARE로 간주됩니다. (이것은 일반적으로 효과가 없습니다.포스트그레SQL, RE는 ARE로 가정되기 때문입니다. 그러나 ERE 또는 BRE 모드가 다음으로 지정된 경우에는 효과가 있습니다.플래그정규식 함수에 대한 매개변수.) RE가 다음으로 시작하는 경우***=, RE의 나머지 부분은 리터럴 스포츠 토토 베트맨열로 간주되며 모든 스포츠 토토 베트맨는 일반 스포츠 토토 베트맨로 간주됩니다.
ARE는 다음으로 시작할 수 있습니다.내장 옵션: 시퀀스(?xyz)(어디에서xyz은 하나 이상의 알파벳 스포츠 토토 베트맨임)은 RE의 나머지 부분에 영향을 미치는 옵션을 지정합니다. 이러한 옵션은 이전에 결정된 모든 옵션을 재정의합니다. 특히 정규식 연산자가 암시하는 대/소스포츠 토토 베트맨 구분 동작을 재정의할 수 있습니다.플래그매개변수를 정규식 함수에 추가합니다. 사용 가능한 옵션 스포츠 토토 베트맨는 다음과 같습니다.표 9.24. 동일한 옵션 스포츠 토토 베트맨가에 사용됩니다.플래그정규식 함수의 매개변수.
표 9.24. 임베디드 옵션 스포츠 토토 베트맨입니다
| 옵션 | 설명 |
|---|---|
b |
RE의 나머지 부분은 BRE입니다. |
c |
대소스포츠 토토 베트맨 구분 일치(연산자 유형 재정의) |
e |
RE의 나머지 부분은 ERE입니다. |
i |
대소스포츠 토토 베트맨를 구분하지 않는 일치(참조섹션 9.7.3.5) (연산자 유형 재정의) |
m |
의 역사적 동의어n |
n |
줄바꿈 구분 일치(참조섹션 9.7.3.5) |
p |
부분 개행 인식 일치(참조섹션 9.7.3.5) |
q |
RE의 나머지 부분은 리터럴입니다(“인용”) 스포츠 토토 베트맨열, 모든 일반 스포츠 토토 베트맨 |
s |
줄바꿈을 구분하지 않는 일치(기본값) |
t |
엄격한 구문(기본값, 아래 참조) |
w |
역 부분 개행 구분(“이상해요”) 일치(참조섹션 9.7.3.5) |
x |
확장된 구문(아래 참조) |
내장된 옵션은 다음에서 적용됩니다.)시퀀스를 종료합니다. ARE 시작 시에만 나타날 수 있습니다(다음 이후).***:이사(있는 경우)).
일반적인 것 외에도 (단단한) 모든 스포츠 토토 베트맨가 중요한 RE 구문에는확장구문, 포함된 항목을 지정하여 사용 가능x옵션. 확장된 구문에서 RE의 공백 스포츠 토토 베트맨는 a 사이의 모든 스포츠 토토 베트맨와 마찬가지로 무시됩니다.#및 다음 개행(또는 RE의 끝). 이를 통해 복잡한 RE에 단락을 지정하고 주석을 달 수 있습니다. 해당 기본 규칙에는 세 가지 예외가 있습니다.
공백 스포츠 토토 베트맨 또는#앞에\보존됨
공백 또는#괄호 안에 표현식이 유지됩니다.
공백과 주석은 다음과 같은 다중 스포츠 토토 베트맨 기호 내에 나타날 수 없습니다.(?:
이 목적을 위해 공백 스포츠 토토 베트맨는 공백, 탭, 개행 및 다음에 속하는 모든 스포츠 토토 베트맨입니다.공간스포츠 토토 베트맨 클래스.
마지막으로 ARE 외부 대괄호 표현식에서 시퀀스(?#ttt)(어디에서ttta를 포함하지 않는 텍스트입니다))은 주석이며 완전히 무시됩니다. 다시 말하지만, 이는 다음과 같은 다중 스포츠 토토 베트맨 기호 스포츠 토토 베트맨 사이에는 허용되지 않습니다.(?:. 이러한 주석은 유용한 기능이라기보다는 역사적 유물에 가깝고 더 이상 사용되지 않습니다. 대신 확장된 구문을 사용하세요.
없음이러한 메타구문 확장 중 초기가 있는 경우 사용할 수 있습니다.***=director는 사용자의 입력이 RE가 아닌 리터럴 스포츠 토토 베트맨열로 처리되도록 지정했습니다.
RE가 주어진 스포츠 토토 베트맨열의 하나 이상의 하위 스포츠 토토 베트맨열과 일치할 수 있는 경우, RE는 스포츠 토토 베트맨열에서 가장 먼저 시작하는 것과 일치합니다. RE가 해당 지점에서 시작하여 두 개 이상의 하위 스포츠 토토 베트맨열과 일치할 수 있는 경우 RE가 다음과 같은지 여부에 따라 가능한 가장 긴 일치 또는 가장 짧은 일치가 선택됩니다.탐욕스러운또는탐욕스럽지 않음.
RE가 욕심이 있는지 여부는 다음 규칙에 따라 결정됩니다.
대부분의 원자와 모든 제약 조건에는 탐욕 속성이 없습니다(어쨌든 가변적인 양의 텍스트와 일치할 수 없기 때문입니다).
RE 주위에 괄호를 추가해도 욕심은 변하지 않습니다.
고정 반복 수량자를 사용하여 수량화된 원자 ({m}또는{m}?)은 원자 자체와 동일한 탐욕을 가지고 있습니다(아마도 없음).
다른 일반 수량자를 사용하는 수량화된 원자(포함{m,n}함께m같음n)는 욕심이 많습니다(가장 긴 일치를 선호함).
탐욕적이지 않은 수량자를 사용하는 수량화된 원자(포함{m,n}?와m같음n)는 욕심이 없습니다(최단 일치를 선호함).
브랜치 — 즉, 최상위 레벨이 없는 RE|연산자 — 탐욕 속성이 있는 첫 번째 정량화된 원자와 동일한 탐욕을 가집니다.
다음으로 연결된 둘 이상의 분기로 구성된 RE|연산자는 항상 탐욕스럽습니다.
위의 규칙은 탐욕 속성을 개별 정량화된 원자뿐만 아니라 정량화된 원자를 포함하는 가지 및 전체 RE와 연관시킵니다. 이는 분기 또는 전체 RE가 가능한 가장 길거나 가장 짧은 하위 스포츠 토토 베트맨열과 일치하는 방식으로 일치가 수행된다는 것을 의미합니다.전체적으로. 전체 일치의 길이가 결정되면 특정 하위 표현식과 일치하는 부분이 해당 하위 표현식의 탐욕 속성을 기반으로 결정되며, RE에서 먼저 시작하는 하위 표현식이 나중에 시작하는 하위 표현식보다 우선순위를 갖습니다.
이것이 무엇을 의미하는지에 대한 예:
부분 스포츠 토토 베트맨열 선택('XY1234Z', 'Y*([0-9]1,3)');결과:123SUBSTRING 선택('XY1234Z', 'Y*?([0-9]1,3)');결과:1
첫 번째 경우에는 RE 전체가 탐욕스럽습니다. 왜냐하면Y*탐욕스럽습니다. 부터 시작하여 일치할 수 있습니다.Y, 그리고 거기에서 시작하는 가능한 가장 긴 스포츠 토토 베트맨열과 일치합니다. 즉,Y123. 출력은 괄호로 묶인 부분입니다. 또는123. 두 번째 경우에는 RE 전체가 탐욕스럽지 않습니다. 왜냐하면Y*?욕심이 없습니다. 부터 시작하여 일치할 수 있습니다.Y, 그리고 거기에서 시작하는 가능한 가장 짧은 스포츠 토토 베트맨열과 일치합니다. 즉,Y1. 하위 표현식[0-9]{1,3}탐욕스럽기는 하지만 전체 경기 길이에 대한 결정을 변경할 수는 없습니다. 따라서 강제로 일치해야 합니다.1.
간단히 말하면, RE에 탐욕스러운 하위 표현과 탐욕스럽지 않은 하위 표현이 모두 포함되어 있는 경우 전체 일치 길이는 전체 RE에 할당된 속성에 따라 가능한 한 길거나 짧습니다. 하위 표현식에 할당된 속성은 허용되는 일치 정도에만 영향을 미칩니다.“먹다”서로 상대적입니다.
수량자{1,1}그리고{1,1}?는 하위 표현식 또는 전체 RE에 탐욕 또는 비탐욕을 각각 강제하는 데 사용될 수 있습니다. 이는 요소에서 추론된 것과 다른 욕심 속성을 갖기 위해 전체 RE가 필요할 때 유용합니다. 예를 들어, 일부 숫자가 포함된 스포츠 토토 베트맨열을 숫자와 그 앞과 뒤의 부분으로 분리하려고 한다고 가정해 보겠습니다. 다음과 같이 시도해 볼 수도 있습니다.
SELECT regexp_match('abc01234xyz', '(.*)(\d+)(.*)');결과:abc0123,4,xyz
그것은 작동하지 않았습니다: 첫 번째.*욕심이 많아서“먹는다”최대한 많이, 떠나\d+가능한 마지막 자리, 마지막 숫자에서 일치시킵니다. 탐욕스럽지 않게 만들어 이 문제를 해결하려고 할 수도 있습니다.
SELECT regexp_match('abc01234xyz', '(.*?)(\d+)(.*)');결과:abc,0,""
그것도 효과가 없었습니다. 이제 RE 전체가 탐욕스럽지 않고 가능한 한 빨리 전체 경기를 종료하기 때문입니다. RE 전체를 탐욕스럽게 만들면 원하는 것을 얻을 수 있습니다.
SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*))1,1');결과:abc,01234,xyz
RE의 전체 탐욕을 해당 구성 요소의 탐욕과 별도로 제어하면 가변 길이 패턴을 처리하는 데 큰 유연성이 허용됩니다.
길거나 짧은 일치 항목을 결정할 때 일치 길이는 조합 요소가 아닌 스포츠 토토 베트맨 단위로 측정됩니다. 빈 스포츠 토토 베트맨열은 전혀 일치하지 않는 것보다 긴 것으로 간주됩니다. 예를 들어:bb*의 가운데 세 글자와 일치abbbc; (week|wee)(밤|기사)다음의 10개 스포츠 토토 베트맨 모두와 일치합니다.주중; 언제(.*).*다음과 일치함abc괄호 안에 있는 하위 표현식은 세 스포츠 토토 베트맨 모두와 일치합니다. 그리고 언제(a*)*다음과 일치함bc전체 RE와 괄호로 묶인 하위 표현식 모두 빈 스포츠 토토 베트맨열과 일치합니다.
대소스포츠 토토 베트맨 독립적인 일치가 지정되면 효과는 마치 모든 대소스포츠 토토 베트맨 구분이 알파벳에서 사라진 것과 같습니다. 여러 경우에 존재하는 알파벳이 대괄호 표현식 외부에서 일반 스포츠 토토 베트맨로 나타나는 경우 두 경우를 모두 포함하는 대괄호 표현식으로 효과적으로 변환됩니다. 예:x되다[xX]. 대괄호 표현식 안에 나타나면 그에 해당하는 모든 대소스포츠 토토 베트맨가 대괄호 표현식에 추가됩니다. 예:[x]되다[xX]그리고[^x]되다[^xX].
줄바꿈 구분 일치가 지정된 경우,.및 대괄호 표현식 사용^개행 스포츠 토토 베트맨와 일치하지 않습니다(따라서 RE가 명시적으로 정렬하지 않는 한 일치는 개행 스포츠 토토 베트맨를 넘지 않습니다).^그리고$은 스포츠 토토 베트맨열의 시작과 끝에서 각각 일치하는 것 외에도 개행 스포츠 토토 베트맨 뒤와 앞의 빈 스포츠 토토 베트맨열과 각각 일치합니다. 그러나 ARE는 탈출합니다.\A그리고\Z스포츠 토토 베트맨열의 시작 또는 끝과 계속 일치만.
부분 개행 구분 일치가 지정된 경우 이는 영향을 받습니다..및 대괄호 표현식은 개행 구분 일치와 같지만^그리고$.
역 부분 개행 구분 일치가 지정된 경우 이는 영향을 받습니다.^그리고$개행 일치 일치와 같지만 그렇지 않음.및 대괄호 표현식. 이는 그다지 유용하지는 않지만 대칭을 위해 제공됩니다.
이 구현에서는 RE 길이에 특별한 제한이 적용되지 않습니다. 그러나 이식성이 뛰어난 프로그램은 256바이트보다 긴 RE를 사용해서는 안 됩니다. POSIX 호환 구현에서는 이러한 RE 승인을 거부할 수 있기 때문입니다.
실제로 POSIX ERE와 호환되지 않는 ARE의 유일한 기능은 다음과 같습니다.\괄호 표현식 내에서 특별한 의미를 잃지 않습니다. 다른 모든 ARE 기능은 POSIX ERE에서 불법이거나 정의되지 않거나 지정되지 않은 효과를 갖는 구문을 사용합니다. 그만큼***이사 구문도 마찬가지로 BRE와 ERE 모두에 대한 POSIX 구문을 벗어났습니다.
많은 ARE 확장은 Perl에서 차용되었지만 일부는 정리하기 위해 변경되었으며 일부 Perl 확장은 존재하지 않습니다. 주의할 점은 다음과 같습니다.\b, \B, 후행 개행에 대한 특수 처리 부족, 개행 구분 일치에 의해 영향을 받는 항목에 보완 대괄호 표현식 추가, 미리보기/뒤돌아보기 제약조건의 괄호 및 역참조 제한, 최장/최단 일치(첫 번째 일치가 아닌) 일치 의미 체계.
ARE와 7.4 이전 릴리스에서 인식되는 ERE 구문 사이에는 두 가지 심각한 비호환성이 존재합니다.PostgreSQL:
ARE에서는\다음에 영숫자 스포츠 토토 베트맨가 오면 이스케이프 또는 오류가 발생하지만 이전 릴리스에서는 영숫자를 작성하는 또 다른 방법이었습니다. 이전 릴리스에서는 이러한 시퀀스를 작성할 이유가 없었기 때문에 이는 큰 문제가 되지 않습니다.
ARE에서는,\특수스포츠 토토 베트맨로 남아있습니다[], 그러니까 리터럴\괄호 안에 표현식을 써야 합니다\\.
BRE는 여러 측면에서 ERE와 다릅니다. BRE에서는|, +및?은 일반 스포츠 토토 베트맨이며 해당 기능에 상응하는 스포츠 토토 베트맨는 없습니다. 경계 구분 기호는 다음과 같습니다.\{그리고\}, 와{그리고}그 자체로는 평범한 스포츠 토토 베트맨입니다. 중첩된 하위 표현식의 괄호는 다음과 같습니다.\(그리고\), 와(그리고)그 자체로는 평범한 스포츠 토토 베트맨입니다.^RE의 시작 부분이나 괄호로 묶인 하위 표현식의 시작 부분을 제외한 일반 스포츠 토토 베트맨입니다.$RE의 끝이나 괄호로 묶인 하위 표현식의 끝을 제외한 일반 스포츠 토토 베트맨이며*RE의 시작 부분이나 괄호로 묶인 하위 표현의 시작 부분(가능한 선행 뒤에 나오는 경우)은 일반 스포츠 토토 베트맨입니다.^). 마지막으로 한자리 역참조가 가능하며,\<그리고\다음의 동의어입니다[[:<:]]그리고[[::]]각각; BRE에서는 다른 이스케이프를 사용할 수 없습니다.
LIKE_REGEX)SQL:2008 이후 SQL 표준에는 다음이 포함됩니다.LIKE_REGEXXQuery 정규식 표준에 따라 패턴 일치를 수행하는 연산자입니다.PostgreSQL아직 이 연산자를 구현하지 않았지만 다음을 사용하여 매우 유사한 동작을 얻을 수 있습니다.regexp_match()함수, XQuery 정규식은 위에서 설명한 ARE 구문과 매우 유사하기 때문입니다.
기존 POSIX 기반 정규식 기능과 XQuery 정규식 간의 주목할만한 차이점은 다음과 같습니다.
XQuery 스포츠 토토 베트맨 클래스 빼기는 지원되지 않습니다. 이 기능의 예는 다음을 사용하여 영어 자음만 일치시키는 것입니다.[a-z-[aeiou]].
XQuery 스포츠 토토 베트맨 클래스 속기\c, \C, \i및\나지원되지 않습니다.
다음을 사용하는 XQuery 스포츠 토토 베트맨 클래스 요소\pUnicodeProperty또는 그 반대\P유니코드속성지원되지 않습니다.
POSIX는 다음과 같은 스포츠 토토 베트맨 클래스를 해석합니다.\w(참조표 9.21) 일반적인 로케일에 따라(다음을 첨부하여 제어할 수 있음)콜레이트연산자 또는 함수 절). XQuery는 유니코드 스포츠 토토 베트맨 속성을 참조하여 이러한 클래스를 지정하므로 유니코드 규칙을 따르는 로케일을 통해서만 동일한 동작을 얻을 수 있습니다.
SQL 표준(XQuery 자체가 아님)은 다음의 더 많은 변형을 수용하려고 시도합니다.“개행”POSIX보다요. 위에 설명된 개행 구분 일치 옵션은 ASCII NL(\n)는 줄 바꿈이지만 SQL에서는 CR(\r), CRLF(\r\n)(Windows 스타일 개행 스포츠 토토 베트맨) 및 LINE SEPARATOR(U+2028)와 같은 일부 유니코드 전용 스포츠 토토 베트맨도 개행 스포츠 토토 베트맨로 사용됩니다. 특히,.그리고\s중요해야 함\r\nSQL에 따르면 두 글자가 아닌 한 글자로 표시됩니다.
다음에 설명된 스포츠 토토 베트맨 입력 이스케이프 중표 9.20, XQuery는 만 지원\n, \r그리고\t.
XQuery는 다음을 지원하지 않습니다.[:괄호 표현식 내의 스포츠 토토 베트맨 클래스에 대한 구문.이름:]
XQuery에는 미리보기 또는 뒤돌아보기 제약조건이 없으며 다음에 설명된 제약조건 이스케이프도 없습니다.표 9.22.
다음에 설명된 메타 구문 형식섹션 9.7.3.4XQuery에 존재하지 않습니다.
XQuery에 의해 정의된 정규식 플래그 스포츠 토토 베트맨는 POSIX의 옵션 스포츠 토토 베트맨와 관련이 있지만 동일하지는 않습니다(표 9.24). 동안i그리고q옵션은 동일하게 작동하지만 다른 옵션은 동일하게 작동하지 않습니다.
XQuery의s(점을 개행 스포츠 토토 베트맨와 일치하도록 허용) 및m(허용^그리고$개행 스포츠 토토 베트맨 일치) 플래그는 POSIX와 동일한 동작에 대한 액세스를 제공합니다.n, p그리고w플래그이지만 그렇습니다.아님POSIX의 동작과 일치s그리고m플래그. 특히 dot-matches-newline은 POSIX에서는 기본 동작이지만 XQuery에서는 그렇지 않습니다.
XQuery의x(패턴의 공백 무시) 플래그는 POSIX의 확장 모드 플래그와 눈에 띄게 다릅니다. POSIX의x플래그도 허용#패턴에서 주석을 시작하고 POSIX는 백슬래시 뒤의 공백 스포츠 토토 베트맨를 무시하지 않습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.