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

9.7. 패턴 매칭

패턴 매칭에 대한 세 가지 별도의 접근 방식이 있습니다 제공PostgreSQL: the 전통적인SQL 좋아요운영자, 더 최근유사연산자 (SQL : 1999에 추가) 및posix-스타일 규칙 표현. 기본 외에"이렇게합니다 문자열 이이 패턴과 스포츠 토토 결과합니까? "운영자, 함수는입니다 스포츠 토토 결과하는 하위 문자열을 추출하거나 교체하고 분할 할 수 있습니다. 스포츠 토토 결과하는 위치의 문자열.

팁 :패턴 스포츠 토토 결과 요구가있는 경우 이 외에도 Perl에 사용자 정의 기능을 작성하는 것을 고려하십시오 또는 tcl.

주의

대부분의 정규 표현력 검색을 실행할 수 있습니다 매우 빨리, 정기적 인 표현이이를 고려할 수 있습니다 임의의 시간과 기억을 처리하여 처리하십시오. BE 정기적 인 발현 검색 패턴을 수락하는 데주의를 기울입니다 적대적인 출처. 그렇게해야한다면, 그것은 권장됩니다 명세서 타임 아웃을 부과합니다.

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

좋아요검색, 존재 다른 두 가지 옵션보다 훨씬 간단하며 사용하기가 더 안전합니다. 아마도 낙담 한 패턴 소스와 함께.

9.7.1. 좋아요

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

theLike표현식 반환 사실String스포츠 토토 결과합니다 공급패턴. (예상대로 그만큼좋아하지 않음표현식 반환 거짓 if좋아요진실을 반환합니다 그 반대도 마찬가지입니다. 동등한 표현은(String좋아요패턴).)

if패턴포함하지 않습니다 퍼센트 부호 또는 밑줄은 패턴 만 나타냅니다 문자열 자체; 이 경우좋아요평등 연산자처럼 행동합니다. an 밑줄 (_) in패턴싱글을 의미합니다 성격; 백분율 표시 (%) 스포츠 토토 결과합니다 0 개 이상의 문자 순서.

일부 예 :

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

Like항상 패턴 일치 전체 문자열을 커버합니다. 그러므로, 그것이 a와 일치하는 것이 바람직하다면 문자열 내 어디서나 순서가되면 패턴이 시작되어야하며 퍼센트 부호로 끝납니다.

없는 밑줄이나 백분율 부호와 스포츠 토토 결과합니다 다른 캐릭터와 스포츠 토토 결과, 각각의 문자패턴보다 우선해야합니다 탈출 캐릭터. 기본 탈출 문자는 백 슬래시입니다 그러나 다른 것을 선택하여 선택할 수 있습니다탈출절. 탈출 캐릭터와 스포츠 토토 결과합니다 그 자체로, 두 개의 탈출 문자를 쓰십시오.

참고 :당신이있는 경우Standard_Conforming_strings끄기, 모든 백 슬래시 문자 그대로 문자열 상수를 쓰면 두 배. 보다섹션 4.1.2.1자세한 내용은

글쓰기로 탈출 문자를 선택할 수도 있습니다탈출 ''. 이것은 효과적으로 비활성화됩니다 탈출 메커니즘으로 인해 끄는 것이 불가능합니다. 밑줄의 특별한 의미와 징후의 퍼센트 징후 무늬.

키워드ilike사용할 수 있습니다 대신좋아요경기를하기 위해 활성 로케일에 따라 사례에 민감합니다. 이것은 없습니다 그만큼SQL표준이지만 APostgreSQL확장.

연산자~~좋아요~~*ilike. 또한!~~and!~~*운영자좋아하지 않음andilike각각. 모두 이 연산자는PostgreSQL-specific.

9.7.2. 유사정규식

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

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

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

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

  • |교대를 나타냅니다 (어느 쪽이든 두 가지 대안).

  • *의 반복을 나타냅니다 이전 항목 0 이상.

  • +| 이전 항목이 한 번 이상.

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

  • {m}이전 항목의 반복mTimes.

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

  • {m,n}를 나타냅니다 이전 항목의 반복m그리고nTimes.

  • 괄호()익숙해 질 수 있습니다 항목을 단일 논리 항목으로 그룹화합니다.

  • 브래킷 표현[...]POSIX 일반과 마찬가지로 문자 클래스를 지정합니다 표현.

기간 (.)는 아닙니다 Metacharacter for유사.

with좋아요, 백 슬래시 이 metacharacters의 특별한 의미를 비활성화합니다. 또는 다른 탈출 문자는로 지정할 수 있습니다.탈출.

일부 예 :

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

theSubstring세 매개 변수Substring (StringFrom패턴forEscape-Character), 제공 SQL 규칙과 일치하는 서브 스트링의 추출 표현 패턴. 와 마찬가지로유사합니다 에게, 지정된 패턴은 전체 데이터와 일치해야합니다 문자열 또는 그렇지 않으면 함수가 실패하고 NULL을 반환합니다. 에게 반환 해야하는 패턴의 일부를 나타냅니다. 성공, 패턴은 탈출의 두 가지 발생을 포함해야합니다. 캐릭터 뒤에 이중 인용문 ("). 패턴 부분과 일치하는 텍스트 이 마커 사이에 반환됩니다.

몇 가지 예,#"구분 리턴 문자열 :

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

9.7.3. POSIX정규 표현

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

표 9-12. 정규 표현식 일치 연산자

운영자 설명 example
~ 정규 표현식, 사례 민감성 일치 '토마스'~ '.*도마.*'
~* 정규 표현, 사례 insensentive 일치 '토마스'~* '.*도마.*'
!~ 정규 표현식과 일치하지 않습니다 예민한 '토마스'! ~ '.*도마.*'
!~* 정규 표현식과 일치하지 않습니다 무감각 '토마스'! ~* '.*Vadim.*'

posix정규 표현 보다 패턴 매칭을위한보다 강력한 수단을 제공합니다좋아요and유사연산자. 와 같은 많은 유닉스 도구egrep, sed, 또는awk패턴 일치 언어를 사용하십시오 여기에 설명 된 것과 비슷합니다.

정규 표현식은 문자 순서입니다. 문자열 세트의 약식 정의 (a일반 세트). 문자열은 a 정규 표현 정기 세트의 구성원 인 경우 정규 표현에 의해 설명됩니다. 와 마찬가지로Like, 패턴 문자 일치 문자열 특수 캐릭터가 아니라면 정확히 캐릭터 정규 표현 언어 - 그러나 정규 표현식 사용 와 다른 특수 문자좋아요같지 않은Like패턴, 정규 표현은입니다 규칙이 아닌 한 문자열 내 어디에서나 일치 할 수 있습니다. 표현은의 시작 또는 끝에 명시 적으로 고정됩니다. 문자열.

일부 예 :

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

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

theSubstring두 매개 변수Substring (StringFrom패턴), a의 추출을 제공합니다 POSIX 정규 표현 패턴과 일치하는 서브 스트링. 그것 일치하지 않으면 null을 반환합니다. 그렇지 않으면 패턴과 일치하는 텍스트. 그러나 패턴에 포함 된 경우 괄호, 텍스트 부분은 첫 번째와 스포츠 토토 결과합니다. 괄호 화 된 서브 표현 (왼쪽 괄호 우선) 반환됩니다. 당신은 주위에 괄호를 넣을 수 있습니다 당신이 그 안에 괄호를 사용하려면 전체 표현 이 예외를 트리거하지 않고. 괄호가 필요한 경우 추출하려는 서브 표현의 패턴, 아래에 설명 된 캡처되지 않은 괄호.

일부 예 :

Substring ( 'O.B')OOBSubstring ( 'o (.) B')의 'foobar')o

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

일부 예 :

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

theregexp_matches함수 캡처 된 모든 하위 문자열의 텍스트 배열을 반환합니다. POSIX 정규 표현 패턴과 일치함으로써 발생합니다. 그것 구문이 있습니다regexp_matches(String, 패턴 [, 플래그]). 기능 줄, 한 줄 또는 여러 행을 반환 할 수 있습니다 ( 참조g아래 플래그). 인 경우패턴함수와 일치하지 않습니다 줄을 반환하지 않습니다. 패턴에 괄호가 포함되지 않은 경우 하위 표현, 그런 다음 반환 된 각 행은 단일 요소 텍스트입니다 전체 패턴과 일치하는 서브 스트링을 포함하는 배열. 만약에 이 패턴에는 괄호 화 된 하위 표현, 기능이 포함되어 있습니다 텍스트 배열을 반환합니다n'th 요소는 스포츠 토토 결과하는 부분 문자열입니다.n'the 괄호의 하위 표현 패턴 (계산되지 않음"비 캡처"괄호; 아래를 참조하십시오 세부). 그만큼플래그매개 변수 0 이상을 포함하는 선택적 텍스트 문자열입니다 기능의 동작을 변경하는 단일 레터 플래그. 깃발g함수가 각각을 찾도록합니다 문자열에서 첫 번째 줄뿐만 아니라 행을 반환합니다. 그러한 경기에 대해. 기타 지원되는 플래그는에 설명되어 있습니다.테이블 9-20.

일부 예 :

regexp_matches ( 'foobarbequebaz', '(bar) (beque)');
 regexp_matches 
---------------
 bar, beque

강제가 가능합니다regexp_matches ()항상 한 줄을 반환합니다 하위 선택성 사용; 이것은 특히에서 유용합니다.select모든 행을 원할 때 대상 목록 반품, 심지어 스포츠 토토 결과하지 않는 것조차도 :

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

theregexp_split_to_table함수는 posix 정규 표현식을 사용하여 문자열을 분할합니다 구분자로서의 패턴. 구문이 있습니다regexp_split_to_table(String, 패턴 [, 플래그]). 없다면 와 스포츠 토토 결과패턴, 함수는를 반환합니다.String. 만약에 적어도 하나의 스포츠 토토 결과가 있습니다. 각 경기마다 텍스트를 반환합니다. 마지막 경기 끝에서 (또는 문자열의 시작) 경기의 시작 부분까지. 더 이상 스포츠 토토 결과하지 않으면 마지막 경기 끝에서 끝까지 텍스트를 반환합니다. 문자열의. 그만큼플래그매개 변수는 0 이상을 포함하는 선택적 텍스트 문자열입니다. 기능의 동작을 변경하는 단일 레터 플래그.regexp_split_to_table지원 에 설명 된 깃발테이블 9-20.

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를 선택하십시오 ( '빠른 갈색 여우는 게으른 개를 뛰어 넘었습니다', e '\\ s+') foo;
  foo   
--------
 그만큼    
 빠른  
 갈색  
 여우    
 점프했다 
 ~ 위에   
 그만큼    
 게으른   
 개    
(9 줄)

regexp_split_to_array를 선택하십시오 ( '빠른 갈색 여우는 게으른 개를 뛰어 넘었습니다', e '\\ s+');
              regexp_split_to_array             
------------------------------------------------
 , 빠른, 갈색, 여우, 점프, 오버, 게으른, 개

마지막 예에서 알 수 있듯이 Regexp 분할 기능 시작 또는 끝에서 발생하는 제로 길이 일치를 무시합니다. 문자열 또는 이전 경기 직후. 이것은 Regexp 매칭의 엄격한 정의와는 반대로 구현regexp_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 또는are36229_36534

참고 : PostgreSQL항상 처음에는 추정됩니다 정규 표현은 규칙을 따릅니다. 하지만, 더 제한된 ERE 또는 BRE 규칙은 선불임베디드 옵션TO re 패턴,섹션 9.7.3.4. 이것은 호환성에 유용 할 수 있습니다 정확히 예상되는 응용 프로그램posix1003.2 규칙.

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

지점이 0 이상입니다정량화 원자또는제약, 연결. 그것은 첫 번째 일치와 일치하고 두 번째와 일치하는 등; 빈 분기는 빈과 일치합니다 끈.

정량화 된 원자는입니다.Atom아마도 싱글이 뒤 따릅니다Quantifier. 정량자가 없으면 스포츠 토토 결과합니다 원자와 스포츠 토토 결과합니다. 정량 자로, 일부는 스포츠 토토 결과 할 수 있습니다 원자의 스포츠 토토 결과 수.Atom에 표시된 가능성이 될 수 있습니다.테이블 9-13. 가능한 정량 자와 그 의미는 다음과 같습니다 표시테이블 9-14.

A 제약 조건빈과 일치합니다 문자열이지만 특정 조건이 충족 될 때만 일치합니다. 에이 원자를 사용할 수있는 경우 제약 조건을 사용할 수 있습니다. 수량자를 따라갈 수 없습니다. 간단한 제약 에 표시됩니다.테이블 9-15; 몇 가지 더 많은 제약이 나중에 설명되어 있습니다.

표 9-13. 정규 발현 원자

Atom 설명
(Re) (wherere정규 표현) 일치re가능한보고
(?:re) 위와 같이 성냥은 언급되지 않았습니다 보고 (a"비 캡처"괄호 세트) (Ares 만 해당)
. 단일 문자와 스포츠 토토 결과
[chars] a 브래킷 표현, 중 하나 스포츠 토토 결과chars(참조섹션 9.7.3.2자세한 내용은)
\k (여기서kis 비 알파럼 기록)는 그 캐릭터와 스포츠 토토 결과합니다 평범한 캐릭터로 간주됩니다 (예 :\\백 슬래시 문자와 스포츠 토토 결과
\c 여기서cIS 영숫자 (아마도 다른 캐릭터가 이어질 수 있음)탈출, 참조섹션 9.7.3.3(Ares 만; Eres와 Bres에서 성냥c)
{ 숫자가 아닌 캐릭터가 뒤 따르는 경우, 왼쪽-경영 문자와 스포츠 토토 결과{; 그 뒤에 숫자가 뒤 따릅니다 a의 시작bound(아래 참조)
x 어디xis 다른 의미가없는 단일 캐릭터, 스포츠 토토 결과 그 캐릭터

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

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

표 9-14. 정규 표현 수량 자

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자세한 내용은

참고 :정량자는 즉시 따를 수 없습니다 다른 수량 자, 예를 들어**is 유효하지 않은. 수량자는 표현을 시작할 수 없습니다 하위 표현 또는 다음^또는|.

표 9-15. 정규 표현 제약 조건

제약 설명
^ 문자열의 시작 부분에서 스포츠 토토 결과
$ 문자열 끝에서 스포츠 토토 결과
(?=re) 긍정적 인 룩 하이드서브 스트링이 스포츠 토토 결과하는 모든 시점에서 스포츠 토토 결과re시작 (Ares 오직)
(?!re) 음수 룩 하이드서브 스트링 스포츠 토토 결과가없는 어느 시점에서 스포츠 토토 결과re시작 (Ares 오직)

Lookahead 제약 조건을 포함 할 수 없습니다뒤로 참조(참조섹션 9.7.3.3), 그 안에있는 모든 괄호가 고려됩니다 비과약.

9.7.3.2. 까치발 표현

A 브래킷 표현목록입니다 동봉 된 문자[]. 그것 일반적으로 목록의 단일 문자와 스포츠 토토 결과합니다 (그러나 아래에). 목록이 시작되면^, 단일 문자와 스포츠 토토 결과not나머지 목록에서. 목록에있는 두 문자가에 분리 된 경우-, 이것은 전체 범위의 속기입니다 Collating 에서이 둘 (포함) 사이의 캐릭터 시퀀스, 예 :[0-9]inASCII모든 소수점과 스포츠 토토 결과합니다 손가락. 두 가지 범위에서 종말점을 공유하는 것은 불법입니다. 예 :A-C-E. 범위는 매우 있습니다 시퀀스에 의존적이므로 휴대용 프로그램이 필요합니다 그들에게 의존하지 마십시오.

문자를 포함하려면]목록, 첫 번째 캐릭터로 만드십시오 (후^, 그것이 사용되는 경우). 문자를 포함하려면-, 첫 번째 또는 마지막으로 만드십시오 캐릭터 또는 범위의 두 번째 엔드 포인트. 사용하려면 오자-a의 첫 번째 끝점으로 범위,[.and.]그것을 집합 요소로 만들려면 (아래 참조). 이 캐릭터를 제외하고는 일부입니다 사용 조합[(다음 참조 단락) 및 탈출 (Ares 만 해당), 기타 모든 특별 캐릭터는 괄호 안에서 특별한 의미를 잃습니다 표현. 특히,\는 그렇지 않습니다 ERE 또는 BRE 규칙을 따를 때 특별하지만 특별하지만 특별합니다. (탈출을 소개 함) Ares에서.

브래킷 표현식 내에서, 집합 요소 (a 문자, 마치 마치 마치 수집되는 다중 문자 시퀀스 그것은 단일 캐릭터이거나 Collating-equence 이름이었습니다. 둘 중 하나) 동봉[.and.]의 순서를 나타냅니다 그 집단 요소의 문자. 시퀀스가 처리됩니다 브래킷 표현 목록의 단일 요소로. 이것 다중 문자를 포함하는 브래킷 표현식을 허용합니다 하나 이상의 캐릭터와 일치하도록 요소 (예 : Collating Sequence에는 A가 포함됩니다.chCollating Element, 그런 다음 re[[. ch.]]*c처음 5 자와 스포츠 토토 결과합니다 의CHCHCC.

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

브래킷 표현식 내에서, 집합 요소가 동봉되었습니다 안에[=and=]is등가 수업, 모든 문자 시퀀스에 서 있습니다 자체를 포함하여 해당 요소와 동등한 요소를 충족시킵니다. (다른 동등한 수집 요소가없는 경우 처리 구분자가 마치 마치[..].) 예, ifo^동등한 클래스의 구성원은 그 다음에[[= o =]], [[=^=]][O^]모든 동의어. 동등성 클래스는 끝점이 될 수 없습니다 범위.

괄호 표현식 내에서 캐릭터 클래스의 이름 동봉[::]모든 문자 목록을 나타냅니다 그 수업에 속합니다. 표준 문자 클래스 이름은 다음과 같습니다.Alnum, 알파, blank, CNTRL, DIGIT, 그래프, 낮은, 인쇄, PANCT, Space, 어퍼, xdigit. 이것들 정의 된 캐릭터 클래스에 대해CTYPE. 로케일은 할 수 있습니다 다른 사람을 제공하십시오. 캐릭터 클래스는 A로 사용할 수 없습니다 범위의 끝점.

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

9.7.3.3. 정규 표현 탈출

탈출특수 시퀀스입니다 부터 시작\영숫자. 탈출은 여러 종류로 제공됩니다. 캐릭터 항목, 클래스 속기, 제약 도피 및 뒤로 참조. 에이\유효한 탈출을 구성하지는 않지만 영숫자 특성은 그렇지 않습니다 Ares에서 불법. Eres에는 탈출이 없습니다 : 외부 a 브래킷 표현, A\영숫자 캐릭터는 단지 그 캐릭터를 나타냅니다 평범한 캐릭터와 브래킷 표현 내부\는 일반적인 캐릭터입니다. (그만큼 후자는 ERE와 ERE 사이의 실제 비 호환성 중 하나입니다 ares.)

캐릭터 엔트리 탈출비 인쇄 및 기타 불편을 쉽게 지정할 수 있습니다 RES의 캐릭터. 그들은에 표시됩니다.표 9-16.

계급 속도 탈출제공 일반적으로 사용되는 특정 캐릭터 클래스의 속기. 그들 에 표시됩니다.표 9-17.

A 제약 탈출is a 구속, 특정 조건 인 경우 빈 문자열과 일치합니다 탈출구로 쓰여진다. 그들은에 표시됩니다.테이블 9-18.

A 뒤로 참조 (\n) 일치합니다 이전 괄호와 일치하는 동일한 문자열 숫자로 지정된 하위 표현n(참조테이블 9-19). 예를 들어,([bc]) \ 1매치BB또는CC하지만BC또는CB. 하위 표현은 전적으로해야합니다 re. 하위 표현입니다 주요 괄호의 순서대로 번호가 매겨집니다. 캡처하지 않는 괄호는 하위 표현을 정의하지 않습니다.

참고 :탈출의 주요임을 명심하십시오\언제 두 배가되어야합니다 패턴을 SQL 문자열 상수로 입력합니다. 을 위한 예:

'123'~ e '^\\ d 3'true

표 9-16. 정규 표현 캐릭터 엔트리 탈출

탈출 설명
\ a ALERT (BELL) 문자 C
\ b c와 같이 백 스페이스
\ b BacksLash의 동의어 (\) 필요를 줄이는 데 도움이됩니다 백 슬래시 배가
\ cX (whereX캐릭터) 5 비트가 낮은 캐릭터 와 동일합니다X, 다른 비트는 모두입니다 영
\ e Collating-Sequence 이름 인 캐릭터esc8 대 가치가있는 캐릭터033
\ f c와 같이 피드를 양식 공급하십시오.
\ n C와 같이 Newline
\ r Carriage Return, C.
\ t c와 같이 수평 탭
\ uWXYZ (whereWXYZis 정확히 4 개의 16 진수 숫자) 캐릭터 16 진수 값은0xWXYZ
\ ustuvwxyz (wherestuvwxyz정확히 8 개의 16 진수 숫자) 문자 16 진수 가치는0xstuvwxyz
\ V C와 같이 수직 탭
\ xHHH (whereHHH16 진수의 시퀀스) 16 진수 값은0xHHH(1661987 | 숫자가 사용됩니다)
\0 가치가있는 캐릭터0(널 바이트)
\xy (wherexyIS 정확히 두 개의 옥탈 자리,​​뒤로 참조) 캐릭터 8 대 값은0xy
\xyz (wherexyzis 정확히 3 개의 옥탈 숫자,뒤로 참조) 캐릭터 8 대 값은0xyz

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

Numeric Char ASCII 범위 (0-127)는 그 의미에 따라 의미가 있습니다 데이터베이스 인코딩. 인코딩이 UTF-8 인 경우 값을 탈출하십시오 예를 들어 유니 코드 코드 포인트와 동일합니다\ u1234문자를 의미U+1234. 다른 멀티 바이트 인코딩의 경우 캐릭터 엔트리 탈출은 일반적으로 단지 지정합니다 캐릭터에 대한 바이트 값의 연결. 만약 탈출 가치는 법적 특성에 해당하지 않습니다. 데이터베이스 인코딩, 오류가 발생하지 않지만 데이터와 일치하지 마십시오.

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

표 9-17. 정규 표현 계급 속도 탈출

탈출 설명
\ 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-18. 정규 표현 제약 탈출

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

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

표 9-19. 정기적 인 표현 참조

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

참고 :사이에는 고유 한 모호성이 있습니다 옥탈 캐릭터 엔트리는 탈출하고 뒤를 참조합니다 암시 된 바와 같이 다음 휴리스틱에 의해 해결됩니다 위에. 주요 제로는 항상 옥탈 탈출을 나타냅니다. 에이 다른 숫자 뒤에는 단일 비 0 자리가 있습니다 항상 등 참조로 사용됩니다. 다중 자리 시퀀스 0으로 시작하지 않음. 적절한 서브 표현 (즉, 숫자 백색 참조를위한 법적 범위에 있습니다). 그렇지 않으면 10 월으로 간주됩니다.

9.7.3.4. 정규 표현 Metasyntax

위에서 설명한 주요 구문 외에도 일부 특별한 형태와 기타 구문 시설 사용 가능.

RE는 두 개의 특별 중 하나부터 시작할 수 있습니다감독접두사. RE가 시작되면***:, 나머지는 다시 사용됩니다 Are. (이것은 일반적으로에 영향을 미치지 않습니다postgresql아레스; 그러나 ERE 또는 BRE 모드가 있었다면 효과가 있습니다. 에 의해 지정됨플래그REGEX 함수에 대한 매개 변수.) RE가 시작되는 경우***=, 나머지 RE는 모든 문자가 평범한 것으로 간주되는 문자 그대로 문자열이 되십시오 캐릭터.

an은 시작할 수 있습니다내장 옵션: 시퀀스(?xyz)(wherexyz하나 이상의 알파벳입니다 문자)는 나머지 RE에 영향을 미치는 옵션을 지정합니다. 이 옵션은 이전에 결정된 옵션을 무시합니다 특히, 그들은 사례 민감성 동작을 무시할 수 있습니다 REGEX 연산자 또는에 의해 암시플래그Regex 함수에 대한 매개 변수. 사용 가능한 옵션 문자는에 표시됩니다.테이블 9-20. 이 동일한 옵션 문자는에 사용됩니다.플래그Regex의 매개 변수 기능.

표 9-20. 내장 된 편지

옵션 설명
b 나머지 RE는 BRE
c Case-Ensensitive 매칭 (연산자를 재정의합니다 유형)
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 나머지는 리터럴 (입니다."인용") 문자열, 모두 일반 문자
s 비 뉴 라인 민감성 스포츠 토토 결과 (기본값)
t 타이트 구문 (기본값; 아래 참조)
w 역 부분 Newline-Ensentive ("이상한") 매칭 (참조섹션 9.7.3.5)
x 확장 된 구문 (아래 참조)

임베디드 옵션은에서 적용됩니다)시퀀스 종단. 그들은 나타날 수 있습니다 시작할 때만 ( 이후에***:감독이 있으면).

평소 외에도 (Tight) 모든 문자가 중요한 RE 구문은 다음과 같습니다.확장구문, 사용할 수 있습니다 임베디드 지정x옵션. ~ 안에 확장 된 구문, 흰색 공간 문자는입니다 A 사이의 모든 문자와 마찬가지로 무시됩니다.#그리고 다음 Newline (또는 끝의 끝 답장). 이것은 단락을 허용하고 복잡한 re. 기본 규칙에는 세 가지 예외가 있습니다.

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

  • 공백 또는#내 브래킷 표현은 유지

  • 공백과 주석은 내부에 나타날 수 없습니다 와 같은 다중 특성 기호(?:

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

마지막으로, 외부 괄호 표현식, the 순서(?#TTT)(whereTTT텍스트가 아닙니다 포함))는 의견입니다. 완전히 무시되었습니다. 다시 말하지만, 이것은이 사이에 허용되지 않습니다 다중 문자 기호의 문자(?:. 그러한 의견은 더 역사적입니다 유용한 시설보다 아티팩트이며 사용은 더 이상 사용되지 않습니다. 대신 확장 된 구문을 사용하십시오.

없음Metasyntax 확장은 초기이면 사용할 수 있습니다.***=Director는 사용자를 명시했습니다 입력은 답장.

9.7.3.5. 정규 표현 일치 규칙

RE가 둘 이상과 일치 할 수있는 경우 주어진 문자열의 하위 문자열, RE는 시작과 일치합니다. 문자열에서 가장 오래. RE가 둘 이상 일치 할 수 있다면 그 시점에서 시작하는 서브 스트링 일치 또는 가장 짧은 경기는 re가Greedy또는비-그 리지.

RE가 탐욕인지 여부는 다음 규칙 :

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

  • RE 주위에 괄호를 추가해도 변경되지는 않습니다 탐욕.

  • 고정 반복 정량자를 갖는 정량화 된 원자 ({m}또는{m}?) 원자와 같은 욕심 (아마도 없음) 그 자체.

  • 다른 정상 정량기가있는 정량화 된 원자 (포함{m,n}withm동일n)는 욕심이 많습니다 (가장 길기 성냥).

  • 비 게리 수량자를 갖는 정량화 된 원자 (포함{m,n}?withm동일n)는 비 게리 (가장 짧은 것을 선호합니다 성냥).

  • 지점-즉, 최상위 수준이없는 RE|운영자 - 동일합니다 최초의 정량화 된 원자로서의 욕심은 탐욕 속성.

  • 그만큼|운영자는 항상입니다 탐욕스러운.

위의 규칙은 욕심성 속성을 연관시킵니다 개별 정량화 된 원자, 그러나 가지가 있습니다 정량화 된 원자를 함유하는 전체 RES. 그 의미는 일치하는 것은 지점 또는 전체 RE, 가장 길거나 가장 짧은 가능한 하부 문자열과 일치전체적으로. 한 번 전체 경기의 길이는 결정됩니다. 특정 하위 표현과 스포츠 토토 결과합니다 해당 하위 표현의 욕심 속성의 기초, RE 복용 초기에 하위 표현이 시작됩니다 나중에 시작하는 사람들보다 우선 순위.

이것이 의미하는 바의 예 :

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

첫 번째 경우, RE 전체는 탐욕 스럽기 때문에y*욕심이 많습니다. 시작과 스포츠 토토 결과 할 수 있습니다 에서Y그리고 가장 긴 일치합니다 가능한 문자열 시작, 즉Y123. 출력은 괄호 안의 부분입니다 또는123. 두 번째 경우, 전체적으로 RE는이 아니기 때문에y*?는 비 게리입니다. 시작할 수 있습니다 그만큼Y, 그리고 가장 짧은 일치 가능한 문자열 시작, 즉Y1. 하위 표현[0-9]{1,3}욕심이 많지만 변경할 수는 없습니다 전체 매치 길이에 대한 결정; 그래서 그것은 강요 당합니다 일치하는1.

간단히 말해서, RE가 탐욕과 비 게리를 모두 포함하는 경우 하위 표현, 총 스포츠 토토 결과 길이는 속성에 따라 가능하거나 짧게 가능합니다. 전체에 할당되었습니다. 에 할당 된 속성 하위 표현은 그 경기의 양에만 영향을 미칩니다. 허용"Eat"각각에 대해 다른.

정량 자{1,1}and{1,1}?강제로 사용될 수 있습니다 a 하위 표현 또는 전체. 이것은 필요할 때 유용합니다 욕심이 무엇인지와 다른 욕심 속성을 갖기 위해 그 요소에서 추론. 예를 들어, 우리가 있다고 가정하십시오 일부 숫자가 포함 된 문자열을 전후에 숫자와 부품. 우리는 노력할 수 있습니다 이렇게하십시오 :

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

작동하지 않았다 : 첫 번째.*IS 욕심 그래서"먹는다"만큼 할 수 있습니다.\ d+마지막 장소, 마지막 숫자. 우리는 그것을 고치려고 노력할 수 있습니다 비 게리로 만들어 :

regexp_matches ( 'abc01234xyz', '(.*?) (\ d+) (.*)'); 선택결과 :abc, 0, ""

지금은 전체적으로 RE가 비 기념품이므로 전체 일치가 곧 끝납니다. 가능한. 우리는 RE를 욕심이 많다 :

regexp_matches ( 'abc01234xyz', '(? : (.*?) (\ d+) (.*)) 1,1');를 선택하십시오.결과 :ABC, 01234, XYZ

RE의 전반적인 탐욕을 별도로 통제합니다 구성 요소의 욕심은 유연성을 크게 허용합니다 가변 길이 패턴 처리.

더 길거나 짧은 경기가 무엇인지 결정할 때 스포츠 토토 결과 길이는 요소를 수집하지 않고 문자로 측정합니다. 빈 문자열은 전혀 스포츠 토토 결과하지 않는 것보다 더 오래 간주됩니다. 예를 들어:BB*세 가지와 스포츠 토토 결과합니다 의 중간 문자ABBBC; (주 | wee) (야간 | 기사단)스포츠 토토 결과합니다 의 10 자주간 밤; 언제(.*).*와 스포츠 토토 결과합니다ABC괄호 화 된 하위 표현 세 문자와 스포츠 토토 결과합니다. 그리고 언제(A*)*와 스포츠 토토 결과합니다BC전체와 괄호가 모두 하위 표현은 빈 문자열과 일치합니다.

사례 독립적 일치가 지정되면 효과가 있습니다 모든 사례 차이가 사라진 것처럼 알파벳. 여러 경우에 존재하는 알파벳이있을 때 브래킷 밖에서 평범한 캐릭터로 나타납니다 표현, 그것은 효과적으로 브래킷으로 변형됩니다 두 경우를 모두 포함하는 표현, 예를 들어x[xx]. 언제 그것은 브래킷 표현식, 모든 경우에 대응합니다 그것의 괄호 표현식에 추가됩니다 (예 :[x][xx]and[^x][^xx].

Newline에 민감한 매칭이 지정된 경우.및 브래킷 표현식 사용^Newline 캐릭터와 결코 일치하지 않습니다 (So 그 일치는 re 명시 적으로 배열) 및^and$이후의 빈 문자열과 일치합니다 그리고 각각 Newline 전에 문자열의 시작과 끝. 하지만 탈출\ a\ zString의 시작 또는 끝 계속전용.

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

역 부분 Newline에 민감한 일치가 인 경우 지정, 이것은 영향을 미칩니다^and$Newline에 민감합니다 일치하지만.및 브래킷 표현. 이것은 그다지 유용하지 않지만 제공됩니다 대칭.

9.7.3.6. 한계와 호환성

RES의 길이에 특정 제한이 부과되지 않습니다. 이 구현. 그러나 프로그램은 높게 고안되었습니다 휴대용은 256 바이트 이상을 사용해서는 안됩니다. POSIX 호환 구현은 그러한 수락을 거부 할 수 있습니다 res.

실제로 호환되지 않는 Ares의 유일한 특징 Posix Eres와 함께\그렇지 않습니다 브래킷 표현 내에서 특별한 의미를 잃습니다. 모두 다른 기능은 불법이거나 Posix Eres에서 정의되지 않거나 지정되지 않은 효과; 그만큼***이사의 구문 마찬가지로 Bres와 Eres의 Posix 구문 밖에서.

많은 ARE 연장은 Perl에서 빌려 왔지만 일부는 청소로 변경되었고 몇 가지 perl 확장이 존재하지 않습니다. 주목할만한 비 호환성\ b, 88455_88459, 후행 뉴 라인에 대한 특별한 대우가 부족합니다 사물에 보완 된 브래킷 표현의 추가 Newline에 민감한 매칭의 영향을받습니다 전망대 제약 조건에서 괄호 및 후면 참조 첫 경기가 아닌 가장 긴/가장 짧은 경기 (첫 경기가 아닌) 일치 의미론.

Ares와 사이에 두 가지 중요한 비 호환성이 존재합니다 ERE 구문은 7.4 이전 릴리스에 의해 인식됩니다.PostgreSQL:

  • In Ares,\영숫자 캐릭터는 탈출 또는 오류입니다. 이전 릴리스에서는 또 다른 방법이었습니다. 영숫자 쓰기. 이것은 많은 a가되어서는 안됩니다 그런 글을 쓸 이유가 없기 때문에 문제 이전 릴리스의 시퀀스.

  • In Ares,\Special로 남아 있습니다 내에서 캐릭터[]오자\괄호 안에 표현이 작성되어야합니다\\.

9.7.3.7. 기본 정규 표현

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