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

6.6. 토토 커뮤니티 매칭

토토 커뮤니티 매칭에 대한 세 가지 별도의 접근 방식이 있습니다 제공postgresql: the 전통적인SQL Like운영자, 더 최근SQL99 유사합니다 에게운영자 및posix-스타일 정규 표현. 또한 토토 커뮤니티 일치 함수,Substring, 사용할 수 있습니다.SQL99-스타일 또는 posix 스타일 정규 표현.

팁 :토토 커뮤니티 일치 요구가있는 경우 이 외에도 Perl에 사용자 정의 기능을 작성하는 것을 고려하십시오 또는 tcl.

6.6.1. 좋아요

StringLike토토 커뮤니티[탈출Escape-Character]String좋아하지토토 커뮤니티[탈출Escape-Character]

Every토토 커뮤니티세트를 정의합니다 줄의. 그만큼좋아요표현 이면 True를 반환합니다.StringIS 에 포함 된에 포함토토 커뮤니티. (예상대로좋아하지 않음표현식이 false를 반환하면좋아요True 및 Vice를 반환합니다 VERSA. 동등한 표현은(String좋아요토토 커뮤니티).)

if토토 커뮤니티에는 포함되어 있지 않습니다 퍼센트 징후 또는 밑줄은 토토 커뮤니티 만 나타냅니다 문자열 자체; 이 경우Like평등 연산자처럼 행동합니다. an 밑줄 (_) in토토 커뮤니티싱글을 의미합니다 성격; 백분율 표시 (%) 일치합니다 0 이상의 문자열.

일부 예 :

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

Like항상 토토 커뮤니티 일치 전체 문자열을 덮으십시오. a의 어느 곳에서나 토토 커뮤니티과 일치합니다 문자열, 토토 커뮤니티은 시작하고 백분율로 끝나야합니다. 징후.

없는 밑줄이나 백분율 부호와 일치합니다 다른 캐릭터와 일치, 각각의 문자토토 커뮤니티보다 우선해야합니다 탈출 캐릭터. 기본 탈출 문자는 백 슬래시입니다 그러나 다른 것을 사용하여 선택 될 수 있습니다.탈출절. 탈출 캐릭터와 일치합니다 그 자체로, 두 개의 탈출 문자를 쓰십시오.

Backslash는 이미 특별한 의미가 있습니다. 문자 리터럴이므로 백 슬래시 쿼리에 두 개의 백 슬래시를 작성해야합니다. 따라서, 실제로 문자 그대로의 백 슬래시와 일치하는 토토 커뮤니티을 작성합니다 쿼리에 4 개의 백 슬래시를 쓰는 것을 의미합니다. 당신은 이것을 피할 수 있습니다 로 다른 탈출 문자를 선택하여탈출; 그런 다음 백 슬래시는 특별하지 않습니다좋아요더 이상. (그러나 그것은 여전히입니다 문자열 리터럴 파서에 특별하므로 여전히 2 개의 그들을.)

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

키워드ilike대신 사용할 수 있습니다 의좋아요경기 케이스를 만들려면 활성 로케일에 따라 둔감합니다. 이것은에 없습니다.SQL표준이지만 APostgreSQL확장.

연산자~~Like~~*대응ilike. 또한! ~~and! ~~*운영자좋아하지 않음andilike. 이 모든 연산자 이다PostgreSQL-specific.

6.6.2. 유사합니다 에게andSQL99일반 표현

String유사토토 커뮤니티[탈출Escape-Character]String토토 커뮤니티[탈출Escape-Character]

the유사운영자 토토 커뮤니티이 일치하는지 여부에 따라 참 또는 거짓을 반환합니다. 주어진 문자열. 그것은 매우 ~좋아요토토 커뮤니티을 해석한다는 점을 제외하고 사용SQL99의 정의 정규 표현.SQL99의 정규 표현은 호기심이 많습니다 교차Like표기법 및 일반적인 정규 표현 표기법.

Like좋아요, The유사운영자는 그 경우에만 성공합니다 토토 커뮤니티은 전체 문자열과 일치합니다. 이것은 일반적인 것과는 다릅니다 토토 커뮤니티이 일치 할 수있는 정규 표현 연습 문자열의 일부. 좋아요Like, 유사합니다 에게용도%_와일드 카드 문자로서 문자열을 나타내는 것입니다 모든 단일 캐릭터 (이들은와 비슷합니다.*and.in POSIX 정규 표현).

이 시설 외에도 빌린이 시설 외에좋아요, 유사합니다 에게이러한 토토 커뮤니티 매칭 메타 카라 터스를 지원합니다 POSIX 정규 표현에서 빌린다 :

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

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

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

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

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

경계 반복 ( 경계 반복에 주목하십시오.?and...)는 제공되지 않습니다 그들은 posix에 존재합니다. 또한, dot (.) IS Metacharacter가 아닙니다.

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

일부 예 :

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

theSubstring기능 세 매개 변수substring (StringFrom토토 커뮤니티for탈출), a의 추출을 제공합니다 SQL99 정규 발현 토토 커뮤니티과 일치하는 서브 스트링. 처럼 와 함께유사, 지정된 토토 커뮤니티 전체 데이터 문자열과 일치해야합니다. 그렇지 않으면 함수가 실패합니다. 그리고 Null을 반환합니다. 토토 커뮤니티의 일부를 나타 내기 위해 성공시 반품해야합니다. SQL99는 토토 커뮤니티을 지정합니다. 이스케이프 캐릭터의 두 가지 발생을 포함해야합니다 Double Quote ("). 텍스트 일치 이 마커들 사이의 토토 커뮤니티 부분은 다음과 같습니다 반품.

일부 예 :

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

6.6.3. posix정규식

표 6-11POSIX를 사용하여 토토 커뮤니티 일치에 사용 가능한 연산자를 나열합니다 정규 표현.

표 6-11. 정규 표현식 일치 연산자

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

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

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

일부 예 :

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

theSubstring두 매개 변수Substring (String토토 커뮤니티), a의 추출을 제공합니다 POSIX 정규 표현 토토 커뮤니티과 일치하는 서브 스트링. 그것 일치하지 않으면 null을 반환합니다. 그렇지 않으면 토토 커뮤니티과 일치하는 텍스트. 그러나 토토 커뮤니티에 포함 된 경우 괄호, 텍스트 부분은 첫 번째와 일치합니다. 괄호 화 된 서브 표현 (왼쪽 괄호 우선) 반환됩니다. 당신은 항상 괄호를 둘 수 있습니다 당신이 그 안에 괄호를 사용하려면 전체 표현 이 예외를 유발하지 않고

일부 예 :

Substring ( 'O.B'에서 'foobar')OOB서브 스트링 ( 'o (.) b')의 'foobar')O

정규 표현식 (Res), 정의 된대로POSIX1003.2, 두 가지 형태로 제공됩니다 : 현대Res (대략egrep; 1003.2 호출"확장" Res) 및 쓸모없는res (대략ed; 1003.2"기본" res).PostgreSQL현대 형태를 구현합니다.

a (현대) Re는 하나 이상의 비어 있지 않습니다브랜치, 분리|. 그것은 하나와 일치하는 모든 것과 일치합니다 지점.

지점이 하나 이상입니다조각, 연결. 그것은 첫 번째 일치와 일치하고 두 번째와 일치하는 등

조각은Atom아마도 그 뒤 싱글*, +, ?또는bound. Atom 뒤에*0 이상의 일치 순서와 일치합니다. 원자. Atom 뒤에+일치 a 원자의 1 개 이상의 일치 순서. Atom 뒤에?0 또는 1 일치 시퀀스와 일치합니다 원자의.

aboundis그 뒤에 서명되지 않은 소수점 정수, 아마도,아마도 서명되지 않은 다른 소수점 정수가 뒤 따릅니다 에 의해. 정수는 0 사이에 있어야합니다 그리고re_dup_max(255) 포함 및 IF 그중 두 가지가 있고 첫 번째는 두 번째를 초과하지 않을 수 있습니다. an 원자 다음에 하나의 정수를 포함하는 바운드i그리고 쉼표는 일련의 시퀀스와 일치하지 않습니다 정확히i원자의 일치. 원자와 하나의 정수를 포함하는 바운드i그리고 쉼표는 일련의 시퀀스와 일치합니다.i또는 원자의 더 많은 일치. 원자와 두 정수를 포함하는 경계iandJ일련의 일치ithroughJ(포함)의 일치 원자.

참고 :반복 연산자 (?, *, +또는 경계)는 다른 사람을 따를 수 없습니다 반복 연산자. 반복 연산자는 시작할 수 없습니다 표현 또는 하위 표현 또는 다음^또는|.

anAtom는 정규 표현입니다 동봉()(일치하는 일치 정규 표현), 빈 집합()(널 스트링 일치), a브래킷 표현(아래 참조),.(단일 문자 일치),^(시작시 Null 문자열과 일치합니다 입력 문자열),$(일치 입력 문자열 끝에 null 문자열), a\그 다음에 캐릭터 중 하나가 뒤 따릅니다^. [$ () |*+? \(해당 캐릭터와 일치합니다 평범한 캐릭터), a\다른 캐릭터에 의해 ( 평범한 캐릭터, 마치 마치\존재하지 않았다) 또는 다른 사람이없는 단일 캐릭터 의미 (그 캐릭터와 일치). 에이그 뒤에는 숫자가 아닌 캐릭터가 뒤 따릅니다 경계의 시작이 아닌 일반적인 캐릭터. 그것은 re와 함께 끝나는 불법\.

백 슬래시 (\) 이미 문자 그럴로 특별한 의미가 있으므로 토토 커뮤니티을 작성합니다. 백 슬래시가 포함 된 상수는 두 개를 써야합니다 쿼리의 백 슬래시.

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

리터럴 포함]목록에서, 첫 번째 캐릭터로 만드십시오 (가능한 다음^). 문자를 포함하려면-, 첫 번째 또는 마지막 캐릭터로 만드십시오. 범위의 두 번째 종말점. 문자를 사용하려면-범위의 첫 번째 엔드 포인트로서, 그것을 둘러싸십시오 안에[.and.]그것을 집합 요소로 만들려면 (아래 참조). 예외와 함께 이것들과를 사용하는 일부 조합[(다음 단락 참조),를 포함한 다른 모든 특수 문자\, 특별한 의미를 잃습니다 브래킷 표현 내에서.

브래킷 표현식 내에서, 집합 요소 (a 문자, 마치 마치 마치 마치 수집되는 다중 문자 시퀀스 단일 캐릭터 또는 Collating-Sectence 이름이었습니다 둘 중 하나) 동봉[.and.]그 문자 순서를 나타냅니다 집합 요소. 시퀀스는 단일 요소입니다 브래킷 표현의 목록. a 따라서 다중 문자 수집 요소는 그 이상과 일치 할 수 있습니다 한 캐릭터 (예 : Collating 시퀀스에 a가 포함 된 경우chCollating Element, 그런 다음 re[[. ch.]]*c처음 5 개와 일치합니다 의 문자CHCHCC.

브래킷 표현식 내에서[=and=]is 캐릭터 시퀀스에 대한 동등성 클래스 모든 충전 요소 중에서 해당 요소와 동등한 요소 중 하나입니다 그 자체. (다른 동등한 수집 요소가없는 경우 치료는 마치 동봉 된 구분자가있는 것처럼[.and.].) 예, ifO^동등한 클래스의 구성원은[[= o =]], [[=^=]][O^]are 모든 동의어. 동등성 클래스는 끝점이 아닐 수 있습니다 범위.

괄호 표현식 내에서 캐릭터 클래스의 이름 동봉[::]모든 문자 목록을 나타냅니다 그 수업에 속합니다. 표준 문자 클래스 이름은 다음과 같습니다.Alnum, 알파, blank, CNTRL, Digit, 그래프, Lower, print, PANCT, Space, 어퍼, xdigit. 이것들은 캐릭터 클래스를 의미합니다 정의CTYPE. 로케일이 제공 할 수 있습니다 기타. 문자 클래스는 범위.

괄호 표현식에는 두 가지 특별한 경우가 있습니다 브래킷 표현[[: <:]]and[[: :]]null 문자열을 일치시킵니다 단어의 시작과 끝. 단어가 정의됩니다 앞에 있지 않은 일련의 단어 문자로 그 뒤에 단어 문자가 뒤 따릅니다. 단어 캐릭터는 알암입니다 문자 (정의 된대로CTYPE) 또는 밑줄. 이것은 연장이며, 호환되지만와 함께 지정하지 않습니다.posix1003.2 다른 사람에게 휴대용을위한 소프트웨어에주의를 기울여 사용 시스템.

RE가 둘 이상의 하위 문자열과 일치 할 수있는 경우 주어진 문자열의 RE는 가장 일찍 시작하는 것과 일치합니다. 문자열. RE가 둘 이상의 하위 문자열과 일치 할 수 있다면 그 시점부터 시작하여 가장 긴 일치합니다. 하위 표현 또한 가장 긴 가능한 하위 문자열과 일치합니다 전체 일치가 가능한 한 길다는 제약, RE에서 일찍 시작하는 하위 표현은 우선 순위를 초과합니다 나중에 시작하는 사람들. 따라서 더 높은 수준의 하위 표현은 주목하십시오 하위 수준 구성 요소보다 우선 순위를 정하십시오 하위 표현.

일치 길이는 수집되지 않은 문자로 측정됩니다 강요. Null 문자열은 일치하지 않는 것보다 더 오래 간주됩니다. 모두. 예를 들어,BB*일치합니다 의 세 가지 중간 문자ABBBC, (Wee | Week) (Knights | Nights)모두 일치합니다 의 10 자주중, 언제(.*).*와 일치합니다ABC괄호가 된 하위 표현은 모두 일치합니다 세 캐릭터, 언제(A*)*IS 일치BC전체 전체 그리고 괄호 안에있는 서브 표현은 널 문자열과 일치합니다.

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

길이에는 특별한 제한이 없습니다res, 메모리는 제한되어 있습니다. 메모리 사용량은 RE에서 대략 선형입니다 크기, 그리고 복잡성을 제외하고는 크게 둔감합니다 경계 반복. 경계 반복은 구현됩니다 거시적 확장, 시간과 공간에서 비용이 많이 드는 경우. 크거나 경계 반복이 중첩되어 있습니다. re, like,((((A 1,100)) 1,100) 1,100) 1,100) 1,100Will (결국) 스왑에서 거의 모든 기존 시스템을 실행합니다. 공간.[1]

노트

[1]

이것은 1994 년에 작성되었습니다. 숫자는 가지고 있습니다 아마도 바뀌었지만 문제는 지속됩니다.