이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 동일한 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 9.7. 윈 토토 매칭버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

9.7. 패턴 매칭

패턴 스포츠 토토에 대한 세 가지 별도의 접근 방식이 있습니다.PostgreSQL: 전통적인SQL Like운영자, 더 최근유사연산자 (SQL : 1999에 추가) 및posix-스타일 정규 표현. 기본 외에이 문자열 이이 패턴과 스포츠 토토합니까?연산자, 기능은 스포츠 토토하는 하위 문자열을 추출하거나 교체하고 스포츠 토토하는 위치에서 문자열을 분할 할 수 있습니다.

이것을 넘어서는 패턴 스포츠 토토 요구가있는 경우 Perl 또는 Tcl에서 사용자 정의 기능을 작성하는 것을 고려하십시오.

주의

대부분의 정규 표현력 검색은 매우 빠르게 실행될 수 있지만, 임의의 시간과 메모리가 처리하는 데 필요한 정기적 인 표현이 고안 될 수 있습니다. 적대적인 소스에서 정기적 인 표현력 검색 패턴을 받아들이는 것에주의하십시오.

사용 검색유사패턴은 동일한 보안 위험이 있습니다.유사동일한 기능을 많이 제공posix-스타일 정규 표현.

Like다른 두 옵션보다 훨씬 간단한 검색은 불가능한 패턴 소스와 함께 사용하기에 더 안전합니다.

9.7.1. Like

StringLike패턴 [탈출Escape-Character]
String좋아하지 않음패턴 [탈출Escape-Character]

theLikeexpression은이면 true를 반환합니다String제공된 것과 스포츠 토토패턴. (예상대로좋아하지 않음expressions false를 반환하면LikeTRUE를 반환하고 그 반대도 마찬가지입니다. 동등한 표현은NOT (StringLike패턴).)

if패턴퍼센트 부호 또는 밑줄을 포함하지 않으면 패턴은 문자열 자체 만 나타냅니다. 이 경우Like평등 연산자처럼 행동합니다. 밑줄 (_) in패턴단일 캐릭터를 나타냅니다. 백분율 표시 (%)는 0 개 이상의 문자의 순서와 스포츠 토토합니다.

일부 예 :

'ABC'Like 'ABC'true'ABC'like 'a%'true'ABC'like '_b_'true'ABC'like 'c'거짓

Like패턴 매칭은 항상 전체 문자열을 커버합니다. 따라서 문자열 내 어디에서나 시퀀스와 일치하는 경우 패턴이 퍼센트 부호로 시작하고 끝나야합니다..

다른 문자와 스포츠 토토하지 않고 문자 그대로 밑줄 또는 백분율 부호와 스포츠 토토하려면 각 문자패턴이스케이프 캐릭터가 선행되어야합니다. 기본 탈출 문자는 백 슬래시이지만를 사용하여 다른 사람을 선택할 수 있습니다.탈출절. 탈출 캐릭터 자체와 일치하려면 두 개의 탈출 문자를 쓰십시오.

Note

당신이있는 경우Standard_Conforming_strings끄면 문자 그대로 문자열 상수로 쓴 백 슬래시는 두 배가되어야합니다. 보다섹션 4.1.2.1자세한 내용은

글쓰기로 탈출 문자를 선택할 수도 있습니다탈출 ''. 이것은 효과적으로 탈출 메커니즘을 비활성화하여 밑줄의 특별한 의미와 패턴의 징후를 끄는 것이 불가능합니다..

키워드ilike대신 사용할 수 있습니다Like활성 로케일에 따라 매치를 케이스에 민감하게 만듭니다. 이것은에 없습니다.SQL표준이지만 A입니다.PostgreSQL확장.

연산자~~Like~~*ilike. 또한!~~and!~~*대표하는 연산자좋아하지 않음andilike14830_14872PostgreSQL-특이 적. 이 연산자 이름이를 볼 수 있습니다.설명파서가 실제로 번역하기 때문에 출력 및 유사한 장소Likeet al. 이 연산자에게.

문구Like, ilike, 좋아하지 않음ilike일반적으로 연산자로 취급됩니다PostgreSQL구문; 예를 들어에서 사용할 수 있습니다.표현 운영자any (SubQuery) COURTUCTS, 그러나 an탈출절도 포함 할 수 없습니다. 일부 모호한 경우 대신 기본 연산자 이름을 사용해야 할 수도 있습니다.

9.7.2. 유사정규식

String유사패턴 [탈출Escape-Character]
String패턴 [탈출Escape-Character]

the유사연산자는 패턴이 주어진 문자열과 일치하는지 여부에 따라 true 또는 false를 반환합니다. 와 비슷합니다.Like, SQL 표준의 정규 표현식 정의를 사용하여 패턴을 해석한다는 점을 제외하고. SQL 정규 표현은 간의 호기심이 있습니다Like표기법 및 일반적인 정규 표현 표기법.

좋아요Like, The유사운영자는 패턴이 전체 문자열과 일치하는 경우에만 성공합니다. 이것은 패턴이 문자열의 모든 부분과 일치 할 수있는 일반적인 정규 표현 동작과 다릅니다.Like, 유사용도_and%하나의 문자와 문자열을 각각 나타내는 와일드 카드 문자로서 (..and.*POSIX 정규 표현식).

이 시설 외에도 빌린이 시설 외에Like, 유사POSIX 정규 표현에서 빌린이 패턴 매칭 메타 카라 터스 지원 :

  • |교대 (두 가지 대안 중 하나)를 나타냅니다.

  • *이전 항목의 반복을 0 이상 또는 더 이상 반복합니다.

  • +이전 항목의 반복을 한 번 이상 반복합니다.

  • ?이전 항목의 반복을 0 또는 한 번에 나타냅니다.

  • {m}정확히 이전 항목의 반복을 나타냅니다mTimes.

  • {m,}이전 항목의 반복을 나타냅니다m또는 더 많은 시간.

  • {m,n}적어도 이전 항목의 반복을 나타냅니다mnTimes.

  • 괄호()항목을 단일 논리 항목으로 그룹화하는 데 사용할 수 있습니다.

  • 브래킷 표현[...]POSIX 정규 표현식과 마찬가지로 캐릭터 클래스를 지정합니다.

기간에 주목하십시오 (.)유사.

withLike, Backslash는 이러한 metacharacters의 특별한 의미를 비활성화합니다. 또는 다른 탈출 문자는로 지정할 수 있습니다.탈출.

일부 예 :

'ABC'와 유사한 'ABC'true'ABC' 'A'거짓'ABC' '%(b | d)%'와 유사합니다.true'ABC'와 비슷한 '(b | c)%'거짓

theSubstring3 개의 매개 변수가있는 함수Substring (StringFrom패턴forEscape-Character), SQL 정규 발현 패턴과 일치하는 기판의 추출을 제공합니다. 와 마찬가지로유사, 지정된 패턴은 전체 데이터 문자열과 일치하거나 함수가 실패하여 NULL을 반환해야합니다. 성공시 반환 해야하는 패턴의 일부를 나타내려면 패턴에는 탈출 문자의 두 가지 발생과 이중 인용문 (가 포함되어야합니다."). 이 마커 사이의 패턴 부분과 일치하는 텍스트가 반환됩니다.

몇 가지 예,#"반환 문자열 구분 :

Substring ( '%#"O_B#"%'for '#').OOBSubstring ( '#'#'#'#'for'#')에서'foobar '에서'foobar ')NULL

9.7.3. posix정규식

표 9.14POSIX 정규 표현식을 사용하여 패턴 일치에 사용 가능한 연산자를 나열합니다.

표 9.14. 정규 표현 시합 연산자

운영자 설명 example
~ 정규 표현, 사례 민감성 일치 'Thomas'~ '.*Thomas.*'
~* 정규 표현, 사례 insensitive 일치 'Thomas'~*'.*Thomas.*'
!~ 정규 표현, 사례 민감성 일치하지 않습니다 'Thomas'! ~ '.*Thomas.*'
!~* 정규 표현, 사례 insensitive 일치하지 않습니다 'Thomas'! ~*'.*Vadim.*'

posix정규 표현식은보다 패턴 일치에 대한 더 강력한 수단을 제공합니다Likeand유사운영자. 와 같은 많은 유닉스 도구egrep, sed또는awk여기에 설명 된 것과 유사한 패턴 일치 언어를 사용하십시오.

정규 표현식은 문자열 세트의 약식 정의 인 문자 순서입니다 (A일반 세트). 문자열은 정규 표현식에 의해 설명 된 일반 세트의 구성원 인 경우 정규 표현식과 일치한다고합니다.Like, 패턴 문자는 정규 표현 언어의 특수 문자가 아니라면 정규 표현식은와 다른 특수 문자를 사용하지 않는 한 정확히 문자열 문자와 스포츠 토토합니다.Like같지 않은Like패턴, 정규 표현식은 문자열의 시작 또는 끝에 명시 적으로 고정되지 않는 한 정규 표현식이 문자열 내 어디에서나 일치 할 수 있습니다..

일부 예 :

'ABC'~ 'ABC'true'ABC'~ '^a'true'abc'~ '(b | d)'true'abc'~ '^(b | c)'거짓

theposix패턴 언어는 아래에 훨씬 자세히 설명되어 있습니다.

theSubstring두 매개 변수가있는 함수Substring (StringFrom패턴), POSIX 정규 표현 패턴과 일치하는 기판 추출을 제공합니다. 일치하지 않으면 널을 반환합니다. 그렇지 않으면 패턴과 일치하는 텍스트 부분이 있습니다.

일부 예 :

서브 스트링 ( 'O.B'에서 'foobar')OOBSubstring ( 'o (.) B')의 'foobar')o

theregexp_replace함수는 POSIX 정규 표현 패턴과 일치하는 하위 문자열에 대한 새 텍스트를 대체합니다. 구문이 있습니다regexp_replace(소스, 패턴, 교체 [, 플래그]). 그만큼소스문자열은와 스포츠 토토하지 않으면 변경되지 않음패턴. 스포츠 토토가 있으면소스문자열이와 함께 반환됩니다.교체스포츠 토토하는 하위 문자로 치환 된 문자열. 그만큼교체문자열이 포함될 수 있습니다\n, 여기서n|n'패턴의 괄호가 삽입 된 하위 표현을 삽입해야하며 포함 할 수 있습니다\ &전체 패턴과 일치하는 서브 스트링이 삽입되어야 함을 나타냅니다. 쓰다\\교체 텍스트에 문자 그대로의 백 슬래시를 넣어야하는 경우. 그만큼플래그매개 변수는 기능의 동작을 변경하는 0 이상의 단일 레터 플래그를 포함하는 선택적 텍스트 문자열입니다. 깃발iCase Insensitive 매칭을 지정하고 플래그g첫 번째 서브 스트링이 아닌 각 일치하는 서브 스트링을 대체합니다. 지원되는 깃발 (아니지만g)에 설명되어표 9.22.

일부 예 :

regexp_replace ( 'foobarbaz', 'b ..', 'x')fooxbazregexp_replace ( 'foobarbaz', 'b ..', 'x', 'g')fooxxregexp_replace ( 'foobarbaz', 'b (..)', 'x \ 1y', 'g')fooxaryxazy

theregexp_match함수는 POSIX 정규 표현 패턴의 첫 번째 일치로 인한 캡처 된 서브 스트링의 텍스트 배열을 리턴합니다. 구문이 있습니다regexp_match(String, 패턴 [, 플래그]). 스포츠 토토하지 않으면 결과는입니다.NULL. 경기가 발견되고패턴괄호가 괄호화 된 하위 표현이 포함되어 있지 않으면 결과는 전체 패턴과 일치하는 하위 문자열을 포함하는 단일 요소 텍스트 배열입니다. 경기가 발견되고패턴괄호가 된 하위 표현을 포함하고 결과는 텍스트 배열입니다.n'th 요소는 스포츠 토토하는 부분 문자열입니다.n'TH 괄호의 하위 표현패턴(계산하지 않음비 캡처괄호; 자세한 내용은 아래를 참조하십시오).플래그매개 변수는 기능의 동작을 변경하는 0 이상의 단일 레터 플래그를 포함하는 선택적 텍스트 문자열입니다. 지원되는 플래그는에 설명되어 있습니다.표 9.22.

일부 예 :

regexp_match를 선택하십시오 ( 'foobarbequebaz', 'bar.*que');

전체 스포츠 토토하는 부분 문자열을 원하는 공동 케이스에서NULL스포츠 토토하지 않으려면

select (regexp_match ( 'foobarbequebaz', 'bar.*que')) [1];

theregexp_matches함수는 POSIX 정규 표현 패턴을 문자열과 일치시키는 캡처 된 하위 문자열의 텍스트 배열 세트를 반환합니다. 그것은와 동일한 구문을 가지고 있습니다.regexp_match. 이 함수는 스포츠 토토하지 않으면 행을 반환하지 않습니다. 스포츠 토토하는 경우 1 행 및g플래그가 제공되지 않거나N있는 경우 행N스포츠 토토 및g플래그가 제공됩니다. 각각의 반환 된 행은 일치하는 전체 하위 문자열을 포함하는 텍스트 배열 또는 괄호의 괄호 안정된 하위 표현과 일치하는 하위 문자열입니다.패턴, 위에서 설명한대로regexp_match. regexp_matches표 9.22더하면g첫 번째 경기뿐만 아니라 모든 경기를 반환하도록 명령하는 깃발.

일부 예 :

regexp_matches를 선택하십시오 ( 'foo', 'not there');

대부분의 경우regexp_matches ()와 함께 사용해야합니다g플래그, 첫 번째 경기 만 원한다면 사용하기가 더 쉽고 효율적이기 때문에regexp_match (). 하지만,regexp_match ()만 존재합니다PostgreSQL버전 10 이상. 이전 버전에서 작업 할 때 일반적인 요령은 A를 배치하는 것입니다.regexp_matches ()예를 들어 하위 선택자로 호출하십시오.

col1, (탭에서 regexp_matches (col2, '(bar)'))를 선택하십시오.

스포츠 토토하는 경우 텍스트 배열을 생성합니다.NULL그렇지 않은 경우regexp_match ()하위 선택이 없으면이 쿼리는 스포츠 토토하지 않고 테이블 행에 대해 전혀 출력을 생성하지 않습니다. 이는 일반적으로 원하는 동작이 아닙니다.

theregexp_split_to_table함수는 POSIX 정규 표현 패턴을 구분 기호로 사용하여 문자열을 분할합니다. 구문이 있습니다regexp_split_to_table(String, 패턴 [, 플래그]). 와 스포츠 토토하지 않는 경우패턴, 함수는를 반환합니다.String. 일치가 하나 이상인 경우 각 경기마다 마지막 경기 끝 (또는 문자열의 시작)에서 경기 시작으로 텍스트를 반환합니다.플래그매개 변수는 기능의 동작을 변경하는 0 이상의 단일 레터 플래그를 포함하는 선택적 텍스트 문자열입니다.regexp_split_to_table에 설명 된 깃발을지지합니다표 9.22.

theregexp_split_to_array함수는와 동일하게 동작합니다regexp_split_to_tableregexp_split_to_array결과를 배열로 반환합니다텍스트. 구문이 있습니다regexp_split_to_array(String, 패턴 [, 플래그]). 매개 변수는와 동일합니다.regexp_split_to_table.

일부 예 :

regexp_split_to_table에서 foo를 선택하십시오 ( '빠른 갈색 여우는 게으른 개 위로 뛰어 올라', '\ s+') foo;

마지막 예제에서 알 수 있듯이 REGEXP 분할 함수는 문자열의 시작 또는 끝에서 또는 이전 일치 직후에 발생하는 제로 길이의 일치를 무시합니다. 이것은 regexp 매칭의 엄격한 정의와 상반됩니다.regexp_matchandregexp_matches, 그러나 실제로는 실제로 가장 편리한 행동입니다. Perl과 같은 다른 소프트웨어 시스템은 유사한 정의를 사용합니다.

9.7.3.1. 정규 표현 세부 사항

PostgreSQL의 정규식은 Henry Spencer가 작성한 소프트웨어 패키지를 사용하여 구현됩니다. 아래의 정규 표현에 대한 많은 설명은 그의 매뉴얼에서 구두로 복사됩니다.

정규 표현식 (Res), 정의 된대로posix1003.2, 두 가지 형태로 제공됩니다 :확장 Res 또는EREs (대략egrep) 및BASIC Res 또는bres (대략ed). PostgreSQL두 가지 양식을 모두 지원하고 POSIX 표준에 없지만 Perl 및 Tcl과 같은 프로그래밍 언어의 가용성으로 인해 널리 사용되는 일부 확장 기능을 구현합니다.Re이 비 포스 확장을 사용하는 것은입니다.고급 Res 또는are38428_38701

Note

PostgreSQL항상 처음에는 정기적 인 표현이 규칙을 따르는 것으로 가정합니다. 그러나 더 제한된 ERE 또는 BRE 규칙은 an을 선물하여 선택할 수 있습니다.임베디드 옵션re 패턴으로,섹션 9.7.3.4. 이것은 정확히 예상되는 응용 프로그램과의 호환성에 유용 할 수 있습니다posix1003.2 규칙.

정규 표현식은 하나 이상으로 정의됩니다분기, 분리|. 그것은 가지 중 하나와 스포츠 토토하는 모든 것과 스포츠 토토합니다.

지점이 0 이상입니다정량화 된 원자또는제약 조건, 연결. 그것은 첫 번째 스포츠 토토와 스포츠 토토하고 두 번째 등의 경기와 스포츠 토토합니다.

정량화 된 원자는입니다.Atom아마도 싱글이 뒤 따릅니다Quantifier. Quantifier가 없으면 원자와 스포츠 토토합니다.Atom표 9.15. 가능한 정량 자와 그 의미는에 표시됩니다.표 9.16.

A 제약 조건빈 문자열과 일치하지만 특정 조건이 충족 될 때만 일치합니다. Quantifier를 따라 할 수없는 경우를 제외하고 원자를 사용할 수있는 경우 제약 조건을 사용할 수 있습니다.표 9.17; 몇 가지 더 많은 제약이 나중에 설명되어 있습니다.

표 9.15. 정규 발현 원자

Atom 설명
(re) (wherere정규 표현))re, 가능한보고를 위해 기록 된 경기
(? :re) 위와 같이, 그러나 스포츠 토토는보고에 주목되지 않습니다 (a비 캡처괄호 세트) (Ares 만 해당)
. 단일 문자와 스포츠 토토
[chars] a 브래킷 표현chars(참조섹션 9.7.3.2자세한 내용은)
\k (wherek는 비 알파 너머 캐릭터입니다.\\백 슬래시 문자와 스포츠 토토
\c 여기서calphanumeric (아마도 다른 문자 뒤에)탈출, 참조섹션 9.7.3.3(Ares 만; Eres and Bres에서 이것은 일치합니다c)
{ 숫자 이외의 캐릭터가 뒤 따르는 경우 왼쪽-브레이스 문자와 스포츠 토토{; 숫자가 뒤따를 때, 그것은 a의 시작입니다.bound(아래 참조)
x 여기서x다른 의미가없는 단일 캐릭터입니다. 그 문자와 스포츠 토토

RE는 백 슬래시로 끝날 수 없습니다 (\).

Note

당신이있는 경우Standard_Conforming_strings끄면 문자 그대로 문자열 상수로 쓴 백 슬래시는 두 배가되어야합니다. 보다섹션 4.1.2.1자세한 내용은

표 9.16. 정규 표현 수량 자

Quantifier 매치
* 원자의 0 이상의 순서
+ 원자의 1 개 이상의 스포츠 토토 시퀀스
? 원자의 0 또는 1 일치 시퀀스
{m} 정확한 시퀀스m원자의 스포츠 토토
{m,} A의 시퀀스m또는 원자의 더 많은 일치
{m,n} A의 시퀀스mthroughn(포함) 원자의 스포츠 토토;m초과 할 수 없습니다n
*? 비가비 버전의*
+? 비가비 버전의+
?? 비가비 버전의?
{m? 비가비 버전의{m}
{m,? 비가비 버전의{m,}
{m,n? 비가비 버전의{m,n}

사용 양식{...}바운드. 숫자mandn경계 안에는 0에서 255까지 허용 값을 가진 서명되지 않은 소수 정수가 있습니다.

비-그 리지Quantifiers (Ares에서만 사용 가능)는 해당 정상 (와 동일한 가능성과 일치합니다.Greedy) 상대방이지만 가장 많은 수의 경기보다는 가장 작은 숫자를 선호합니다. 보다섹션 9.7.3.5자세한 내용은

Note

Quantifier는 즉시 다른 정량 자 (예 :를 따를 수 없습니다.**유효하지 않습니다. Quantifier는 표현 또는 하위 표현을 시작하거나 따라갈 수 없습니다^또는|.

표 9.17. 정규 표현 제약

제약 조건 설명
^ 문자열의 시작 부분에서 스포츠 토토
$ 문자열 끝에서 스포츠 토토
(? =re) 긍정적 인 룩 하이드서브 스트링이 스포츠 토토하는 모든 시점에서 스포츠 토토re시작 (Ares 만 해당)
(?!re) 음수 룩 하이드기판이 스포츠 토토하지 않는 어느 시점에서 스포츠 토토re시작 (Ares 만 해당)
(? <=re) 긍정적 인 외관서브 스트링이 스포츠 토토하는 모든 시점에서 스포츠 토토re끝 (Ares 만 해당)
(? re) 부정적인 외관기판이 스포츠 토토하지 않는 어느 시점에서 스포츠 토토re끝 (Ares 만 해당)

Lookahead and Lookbehind 제약 조건을 포함 할 수 없습니다뒤로 참조(참조섹션 9.7.3.3), 그 안에있는 모든 괄호는 캡처되지 않는 것으로 간주됩니다.

9.7.3.2. 브래킷 표현

A 브래킷 표현[]. 일반적으로 목록의 단일 문자와 스포츠 토토합니다 (그러나 아래 참조).^, 단일 문자와 스포츠 토토아님나머지 목록에서. 목록에있는 두 문자가에 분리 된 경우-, 이것은 Collating 순서 에서이 두 (포함) 사이의 전체 범위의 문자에 대한 속기입니다 (예 :[0-9]inASCII모든 소수점 숫자와 스포츠 토토합니다. 두 가지 범위에서 종말점을 공유하는 것은 불법입니다 (예 :A-C-E. 범위는 매우 합의 된 시퀀스 의존적이므로 휴대용 프로그램은 그들에게 의존하지 않아야합니다.

문자 포함]목록에서 첫 번째 문자로 만드십시오 (후^, 그것이 사용되는 경우). 문자를 포함하려면-, 그것을 첫 번째 또는 마지막 문자 또는 범위의 두 번째 종점으로 만드십시오. 문자를 사용하려면-범위의 첫 번째 끝점으로[.and.]이를 집합 요소로 만들려면 (아래 참조). 이 문자를 제외하고는 사용을 사용하는 일부 조합[(다음 단락 참조) 및 탈출 (ARES 만 해당), 다른 모든 특수 캐릭터는 브래킷 표현식 내에서 특별한 중요성을 잃습니다. 특히,\eRE 또는 BRE 규칙을 따를 때 특별하지는 않지만 ARES에서 특별한 (탈출을 도입 함)..

브래킷 표현식, 집합 요소 (캐릭터, 단일 문자 인 것처럼 고집되는 다중 문자 시퀀스 또는 둘 중 하나에 대한 Collating-equence 이름) 내에서 동봉 된 내에서[.and.]해당 합의 요소의 문자 순서를 나타냅니다. 시퀀스는 브래킷 표현 목록의 단일 요소로 취급됩니다.chCollating Element, 그런 다음 re[[. ch.]]*c의 첫 5 자와 스포츠 토토CHCHCC.

Note

PostgreSQL현재 다중 문자 수집 요소를 지원하지 않습니다. 이 정보는 가능한 미래 행동을 설명합니다.

브래킷 표현식 내에서38999_39001and=]is등가 클래스, 자체를 포함하여 해당 요소와 동등한 모든 Collating Elements의 문자 시퀀스에 서 있습니다. (다른 동등한 수집 요소가없는 경우, 처리는 마치 동봉 된 구분자가있는 것처럼[.and.].) 예를 들어, ifoand^동등한 클래스의 구성원은[[= o =]], [[=^=]][O^]모두 동의어입니다. 동등성 클래스는 범위의 끝점이 될 수 없습니다.

브래킷 표현식 내에서,.[:and:]해당 클래스에 속하는 모든 문자 목록을 나타냅니다. 표준 문자 클래스 이름은 다음과 같습니다.Alnum, 알파, blank, cntrl, DIGIT, 그래프, Lower, 인쇄, PANCT, Space, 어퍼, xdigit. 이들은 정의 된 캐릭터 클래스를 나타냅니다CTYPE. 로케일은 다른 사람들을 제공 할 수 있습니다.

브래킷 표현식의 두 가지 특별한 사례가 있습니다 : 브래킷 표현식[[: <:]]and[[:> :]]는 각각 단어의 시작과 끝에 빈 줄을 일치시키는 제약 조건입니다. 단어는 우선하거나 단어 문자가 뒤 따르는 일련의 단어 문자로 정의됩니다.Alnum문자 (.CTYPE) 또는 밑줄. 이것은 연장이며, 호환되지만와 함께 지정하지 않습니다.posix1003.2, 다른 시스템에 휴대 할 수있는 소프트웨어에주의해서 사용해야합니다. 아래에 설명 된 제약 도피는 일반적으로 바람직하다.

9.7.3.3. 정규 표현 도피

탈출로 시작하는 특수 시퀀스입니다.\그 다음 영숫자 문자가 뒤 따릅니다. 탈출은 캐릭터 항목, 계급 속기, 제약 탈출 및 등 참조의 여러 종류로 제공됩니다.\이후 영숫자 특성이지만 유효한 탈출을 구성하지 않는 것은 Ares에서 불법입니다. Eres에는 탈출이 없습니다 : 괄호 표현 외부, a\그 뒤에는 영숫자 캐릭터가 그 캐릭터를 평범한 캐릭터로, 괄호 표현식 내부에 나타납니다.\는 일반적인 캐릭터입니다. (후자는 Eres와 Ares 사이의 실제 비 호환성 중 하나입니다.)

캐릭터 엔트리 탈출RES에서 비 인쇄 및 기타 불편한 문자를보다 쉽게 ​​지정할 수 있도록 존재합니다. 그들은에 표시됩니다.표 9.18.

계급 속도 탈출일반적으로 사용되는 특정 문자 클래스에 대한 속기를 제공합니다. 그들은에 표시됩니다.표 9.19.

A 제약 탈출는 탈출로 작성된 특정 조건이 충족되면 빈 문자열과 일치하는 제약 조건입니다. 그들은에 표시됩니다.표 9.20.

A 뒤로 참조 (\n)는 숫자로 지정된 이전 괄호로 된 하위 표현과 일치하는 동일한 문자열과 일치합니다n(참조표 9.21). 예를 들어,([bc]) \ 1매치BB또는CC하지만BC또는CB. 하위 표현은 전적으로 RE의 후면 참조보다 우선해야합니다.

표 9.18. 정규 표현 캐릭터 입력 탈출

탈출 설명
\ a ALERT (BELL) 문자 C
\ b c와 같이 백 스페이스
\ b BacksLash의 동의어 (\) Backslash 배가의 필요성을 줄이는 데 도움이됩니다
\ cX (whereX모든 캐릭터입니다) 저음 5 비트가와 동일합니다.X, 다른 비트가 모두 0
\ e Collating-Sequence 이름 인 캐릭터esc033
\ f c와 같이 피드 양식
\ n Newline, C
\ r Carriage Return, C
\ t c와 같이 수평 탭
\ uWXYZ (whereWXYZ정확히 4 개의 16 진수 숫자입니다) 16 진수 가치가있는 캐릭터0xWXYZ
\ ustuvwxyz (wherestuvwxyz정확히 8 개의 16 진수 숫자입니다) 16 진수 가치가있는 캐릭터0xstuvwxyz
\ V C와 같이 수직 탭
\ xHHH (whereHHH16 진수 숫자의 순서)) hexadecimal value가있는 문자0xHHH
\ 0 가치가있는 캐릭터0(널 바이트)
\XY (whereXY정확히 두 개의 옥탈 자리이며뒤로 참조) 문자 값이있는 문자0XY
\xyz (wherexyz정확히 3 개의 옥탈 숫자이며뒤로 참조) 문자 값이있는 문자0xyz

16 진수 숫자는0-9, a-fA-F. 옥탈 숫자는0-7.

숫자 문자 엔트리 ESCAPES ASCII 범위 (0-127) 외부의 값을 지정하는 것은 데이터베이스 인코딩에 의존하는 의미를 갖습니다. 인코딩이 UTF-8 인 경우 탈출 값은 유니 코드 코드 포인트와 동일합니다.\ u1234문자를 의미U+1234. 다른 멀티 바이트 인코딩의 경우, 캐릭터 엔트리 탈출은 일반적으로 문자에 대한 바이트 값의 연결을 지정합니다.

캐릭터 입력 탈출은 항상 일반적인 캐릭터로 간주됩니다. 예를 들어,\ 135is]ASCII에서\ 135브래킷 표현을 종료하지 않습니다.

표 9.19. 정규 표현식 클래스 속도 탈출

탈출 설명
\ d [[: Digit :]]
\ s [[: Space :]]
\ w [[: alnum :] _](참고 밑줄 포함)
\ d [^[: digit :]]
\ s [^[: space :]]
\ w [^[: alnum :] _](참고 밑줄 포함)

브래킷 표현 내에서\ d, \ s\ w외부 괄호를 잃고\ d, \ s\ w불법입니다. (예를 들어,[A-C \ D][a-c [: digit :]]. 또한,[a-c \ d], 이는[a-c^[: digit :]], 불법입니다.)

표 9.20. 정규 표현 제약 제한 탈출

탈출 설명
\ a 문자열의 시작 부분에서만 일치합니다 (참조섹션 9.7.3.5이것이 어떻게 다른지^)
\ m 단어의 시작 부분에만 스포츠 토토
\ m 단어의 끝에서만 스포츠 토토
\ y 단어의 시작 또는 끝에서만 일치
\ y 단어의 시작 또는 끝이 아닌 지점에서만 일치합니다
\ z 문자열 끝에서만 일치합니다 (참조섹션 9.7.3.5이것이 어떻게 다른지$)

단어는 사양에서와 같이 정의됩니다.[[: <:]]and[[:> :]]위. 제약 도피는 괄호 표현 내에서 불법입니다.

표 9.21. 정규 표현 등 참조

탈출 설명
\m (wherem는 0이 아닌 숫자입니다)에 대한 등 참조m'th subexpression
\MNN (wherem는 0이 아닌 숫자이며NN더 많은 숫자이고 소수점 값MNN지금까지 볼 수있는 괄호를 캡처하는 마감 수보다 크지 않습니다)MNN'th subexpression

Note

옥탈 문자 입력 탈출과 후면 참조 사이에는 고유 한 모호성이 있으며, 이는 위의 힌트를 힌트 한 바와 같이 다음 휴리스틱에 의해 해결됩니다. 주요 제로는 항상 옥탈 탈출을 나타냅니다.

9.7.3.4. 정규 표현 metasyntax

위에서 설명한 주요 구문 외에도 몇 가지 특별한 형태와 기타 구문 시설이 있습니다.

RE는 두 개의 특별 중 하나부터 시작할 수 있습니다감독접두사. RE가 시작되면*** :, 나머지 RE는 다음과 같이 간주됩니다. (이것은 일반적으로에 영향을 미치지 않습니다PostgreSQL, res는 Ares로 가정되기 때문에; 그러나 ERE 또는 BRE 모드가에 지정된 경우 효과가 있습니다.플래그REGEX 함수에 대한 매개 변수.) RE가 시작되는 경우***=, 나머지 RE는 문자 그대로 문자열로 간주되며 모든 문자는 일반 문자로 간주됩니다.

an은 시작할 수 있습니다임베디드 옵션: 시퀀스(?xyz)(wherexyz는 하나 이상의 알파벳 문자입니다)는 나머지 RE에 영향을 미치는 옵션을 지정합니다. 이러한 옵션은 이전에 결정된 옵션을 무시합니다. 특히 Regex 연산자가 암시하는 사례 감도 동작 또는를 무시할 수 있습니다.플래그Regex 함수에 대한 매개 변수. 사용 가능한 옵션 문자는에 표시됩니다.표 9.22. 이 동일한 옵션 문자는에 사용됩니다.플래그Regex 함수의 매개 변수.

표 9.22. 내장 된 편지

옵션 설명
b 나머지 RE는 BRE
c Case-Sensitive Matching (Ownerides Operator Type)
e 나머지 re is ere
i 케이스 감수성 일치 (참조섹션 9.7.3.5) (오퍼레이터 유형을 재정의)
m 역사적 동의어에 대한n
n Newline-Ensensitive Matching (참조섹션 9.7.3.5)
p 부분 Newline에 민감한 매칭 (참조섹션 9.7.3.5)
q 나머지는 리터럴 (입니다.quoted) 문자열, 모든 일반 문자
s 비 뉴 라인 민감성 스포츠 토토 (기본값)
t 타이트 구문 (기본값; 아래 참조)
w 역 부분 Newline-Ensentive (이상한) 매칭 (참조섹션 9.7.3.5)
x 확장 된 구문 (아래 참조)

임베디드 옵션은에서 적용됩니다.)시퀀스 종단. 그들은 are의 시작 부분에서만 나타날 수 있습니다 (*** :Director).

평소 외에도 (titg) RE 구문, 모든 문자가 중요한 경우가 있습니다.확장구문, 임베디드를 지정하여 사용할 수 있습니다x옵션. 확장 된 구문에서 a 사이의 모든 문자와 마찬가지로 RE의 흰색 공간 문자는 무시됩니다.#및 다음 Newline (또는 RE의 끝). 이것은 단락을 허용하고 복잡한 re.

  • 흰색 공간 문자 또는#앞서\유지

  • 공백 또는#브래킷 표현식 내에서

  • 공백 및 댓글은와 같은 다중 문자 기호 내에 나타날 수 없습니다.(? :

이 목적을 위해 흰색 공간 문자는 비어 있고 탭, Newline 및에 속하는 모든 문자입니다.Space캐릭터 클래스.

마지막으로, 외부 브래킷 표현식, 시퀀스(?#TTT)(whereTTTA가 포함되지 않은 텍스트입니다))는 완전히 무시 된 주석입니다. 다시 말하지만, 이것은 다중 문자 기호의 문자 사이에서 허용되지 않습니다.(? :. 이러한 의견은 유용한 시설보다 역사적 인 유물이며, 그 사용은 사용되지 않습니다.

없음이 metasyntax 확장의 초기 인 경우***=Director는 사용자의 입력이 re.가 아닌 문자 그대로 문자열로 취급하도록 지정했습니다.

9.7.3.5. 정규 표현식 일치 규칙

RE가 주어진 문자열의 하나 이상의 하위 스트링과 일치 할 수있는 경우, RE는 문자열에서 가장 일찍 시작하는 것과 일치합니다. RE가 해당 시점에서 시작하여 하나 이상의 하위 문자열을 일치시킬 수 있다면, 가장 긴 일치 또는 가장 짧은 경기는 RE인지에 따라Greedy또는비-그 리지.

RE가 탐욕인지 여부는 다음 규칙에 따라 결정됩니다.

  • 대부분의 원자와 모든 제약 조건은 탐욕 속성이 없습니다 (어쨌든 변수의 텍스트 금액과 일치 할 수 없기 때문에)..

  • RE 주위에 괄호를 추가하는 것은 탐욕을 바꾸지 않습니다.

  • 고정 반복 Quantifier (가있는 정량화 된 원자{m}또는{m?)는 원자 자체와 같은 욕심 (아마도 없음)을 가지고 있습니다.

  • 다른 정상 정량기가있는 정량화 된 원자 (포함{m,n}withm동일n)는 탐욕 스럽습니다 (가장 긴 경기를 선호합니다).

  • 비 게리 정량기가있는 정량화 된 원자 (포함{m,n?withm동일n)는 비 기업 (가장 짧은 경기를 선호)입니다.

  • 지점-즉, 최상위 수준이없는 re|운영자 - 탐욕 속성이있는 첫 번째 정량화 된 원자와 동일한 욕심이 있습니다.

  • |운영자는 항상 탐욕 스럽습니다.

위의 규칙은 탐욕 속성을 개별 정량화 된 원자뿐만 아니라 정량화 된 원자를 포함하는 가지 및 전체 해상도와 관련이 있습니다. 그 의미는 일치하는 것이 분기 또는 전체가 가능한 가장 길거나 가장 짧은 하위 문자열과 일치하는 방식으로 이루어진다는 것입니다.전체적으로. 전체 일치의 길이가 결정되면, 특정 하위 표현과 일치하는 부분은 해당 하위 표현의 욕심 속성에 기초하여 결정되며, 하위 표현은 나중에 시작하는 것보다 우선 순위를 초래합니다..

이것이 의미하는 바의 예 :

SELLE SELECT SILLTRING ( 'XY1234Z', 'y*([0-9] 1,3)');결과 :123SELLE SELECT SILLTRING ( 'XY1234Z', 'y*? ([0-9] 1,3)');결과 :1

첫 번째 경우, RE 전체는 탐욕 스럽기 때문에Y*욕심이 많습니다. 에서 시작할 수 있습니다.YY123. 출력은 그 부분의 괄호 나 부분입니다.123. 두 번째 경우, 전체적으로 RE는 regreed이 아니기 때문에y*?는 비 게리입니다. 에서 시작할 수 있습니다.YY1. 하위 표현[0-9] 1,3탐욕 스럽지만 전체 스포츠 토토 길이에 대한 결정을 변경할 수는 없습니다. 그래서 그것은 단지 스포츠 토토해야합니다1.

간단히 말해서, RE에 탐욕과 비 기화 서브 표현이 모두 포함 된 경우, 전체 일치 길이는 전체적으로 지정된 속성에 따라 가능한 한 길거나 짧은 시간입니다. 하위 표현에 할당 된 속성은 해당 일치의 양에만 영향을 미칩니다.Eat서로에 대해.

정량 자{1,1}and1,1?| 서브 표현 또는 전체에서 욕심 또는 비가 유리를 강요하는 데 각각 사용될 수 있습니다. 이것은 당신이 그 요소에서 추론 된 것과 다른 욕심력 속성을 갖기 위해 전체를 필요로 할 때 유용합니다.

regexp_match ( 'ABC01234XYZ', '(.*) (\ d+) (.*)');를 선택하십시오.결과 :ABC0123,4, XYZ

작동하지 않았다 : 첫 번째.*욕심이 많으므로Eats가능한 한,\ d+마지막 장소에서 마지막 숫자와 스포츠 토토합니다. 우리는 그것을 비 게리로 만들어서 그것을 고치려고 노력할 수 있습니다 :

regexp_match ( 'ABC01234XYZ', '(.*?) (\ d+) (.*)');를 선택하십시오.결과 :abc, 0, ""

지금도 작동하지 않았기 때문에 이제는 전체적으로 RE가 아닌 것이 아니기 때문에 가능한 한 빨리 전체 일치를 종료하기 때문입니다. 우리는 RE를 전체적으로 욕심으로 강요함으로써 우리가 원하는 것을 얻을 수 있습니다 :

regexp_match ( 'abc01234xyz', '(? : (.*?) (\ d+) (.*)) 1,1'); 선택결과 :ABC, 01234, XYZ

구성 요소의 욕심과 별도로 RE의 전체 탐욕을 통제하면 가변 길이 패턴을 처리하는 데 큰 유연성이 가능합니다.

더 길거나 짧은 스포츠 토토가 무엇인지 결정할 때 스포츠 토토 길이는 요소가 아닌 문자로 측정됩니다. 빈 문자열은 전혀 스포츠 토토하지 않는 것보다 더 오래 간주됩니다.BB*의 세 가지 중간 문자와 스포츠 토토ABBBC; (주 | Wee) (Night | Knights)|주간 밤; 언제(.*).*와 스포츠 토토합니다56460_56463괄호 화 된 하위 표현은 세 문자와 스포츠 토토합니다. 그리고 언제(A*)*와 스포츠 토토합니다BC전체 RE와 괄호 화 된 하위 표현이 빈 문자열과 일치합니다.

사례 독립적 일치가 지정되면 모든 사례 차이가 알파벳으로 사라진 것처럼 효과가 발생합니다. 여러 경우에 존재하는 알파벳이 괄호 표현 외부에서 일반적인 문자로 나타나면, 예를 들어 두 경우를 포함하는 브래킷 표현으로 효과적으로 변형됩니다.x[xx]. 브래킷 표현식 내부에 나타나면, 모든 케이스 대응 물이 브래킷 표현식에 추가됩니다 (예 :[x][xx]and[^x][^xx].

Newline에 민감한 매칭이 지정된 경우.및 괄호 사용^Newline 캐릭터와 결코 일치하지 않을 것입니다 (따라서 일치는 명시 적으로 배열하지 않으면 Newlines를 교차하지 않습니다) 및.^and$는 문자열의 시작과 끝에서 각각 일치하는 것 외에도 Newline 이후 및 각각 빈 문자열과 일치합니다. 하지만 탈출\ aand\ zString의 시작 또는 끝 계속전용.

부분 Newline에 민감한 매칭이 지정되면.및 Newline에 민감한 매칭과 같은 브래킷 표현식이지만^and$.

역 부분 Newline에 민감한 매칭이 지정되면^and$Newline에 민감한 일치와 마찬가지로.및 브래킷 표현식. 이것은 그다지 유용하지 않지만 대칭을 위해 제공됩니다.

9.7.3.6. 한계 및 호환성

이 구현에서 RES 길이에 특정 제한이 부과되지 않습니다. 그러나 POSIX 준수 구현은 그러한 해당을 수용하는 것을 거부 할 수 있으므로 휴대 성이 높은 프로그램은 256 바이트 이상을 사용해서는 안됩니다.

실제로 Posix Eres와 실제로 양립 할 수없는 Ares의 유일한 특징은입니다.\브래킷 표현식 내에서 특별한 중요성을 잃지 않습니다. 다른 모든 것은 불법이거나 Posix Eres에서 정의되지 않았거나 지정되지 않은 효과를 가진 구문을 사용하는 기능입니다.***이사의 구문 마찬가지로 BRES와 ERES의 POSIX 구문 외부에 있습니다.

많은 ARE 확장은 Perl에서 빌려 왔지만 일부는 청소로 변경되었으며 일부 Perl 확장은 존재하지 않습니다. 주목할만한 비 호환성\ b, \ b, 후행 뉴 라인에 대한 특별한 치료 부족, Newline에 민감한 매칭의 영향을받는 것들에 보완 된 브래킷 표현의 추가, 전망대/외관 제약에서 괄호 및 후면 참조에 대한 제한 사항, 그리고 가장 긴/가장 짧은 매칭 (첫 번째 모임이 아닌 가장 긴/일치

ares와 ere 구문 사이에는 7.4 이전 릴리스 사이에 두 가지 중요한 비 호환성이 존재합니다.PostgreSQL:

  • in Ares,\이후 영숫자 문자는 탈출 또는 오류이며, 이전 릴리스에서는 영숫자를 쓰는 또 다른 방법이었습니다. 이전 릴리스에 그러한 시퀀스를 작성할 이유가 없기 때문에 문제가되지 않아야합니다.

  • in Ares,\남아있는 특별한 캐릭터[], 그래서 문자 그대로\브래킷 표현식 내에 작성해야\\.

9.7.3.7. 기본 정규 표현

Bres는 여러 측면에서 ERE와 다릅니다. Bres,|, +?는 일반적인 문자이며 해당 기능과 동등한 것은 없습니다. 경계의 구분자는\and\, with{and}그 자체로 평범한 문자. 중첩 하위 표현의 괄호는입니다.\ (and\), with(and)그 자체로 평범한 문자.^| 괄호의 시작 또는 괄호의 시작 부분을 제외하고는 일반적인 캐릭터입니다.$*RE의 시작 부분 또는 괄호로 된 하위 표현의 시작 부분에 나타나는 경우 일반적인 캐릭터입니다 (가능한 선임 후^). 마지막으로 Single-Figit Back 참조를 사용할 수 있으며\ <and\>동의어입니다[[: <:]]and[[:> :]]각각; Bres에서는 다른 탈출구가 없습니다.