Postgresql 9.1.24 문서화 | ||||
---|---|---|---|---|
이전 | up | 9 장. | 다음 |
패턴 매칭에 대한 세 가지 별도의 접근 방식이 있습니다PostgreSQL: theSQL Like
운영자, 더 최근유사
연산자 (SQL : 1999에 추가) 및posix-스타일 규칙"이렇게합니다운영자, 함수는입니다
팁 :패턴 스포츠 토토 결과 요구가있는 경우
주의 |
대부분의 정규 표현력 검색을 실행할 수 있습니다 사용 검색
|
Like
StringLike패턴 [탈출Escape-Character] String좋아하지 않음패턴 [탈출Escape-Character]
theLike
표현식 반환String스포츠 토토 결과합니다패턴. (예상대로좋아하지 않음
표현식 반환Like
진실을 반환합니다StringLike패턴).)
if패턴포함하지 않습니다Like
평등 연산자처럼 행동합니다. an_) in패턴싱글을 의미합니다%) 스포츠 토토 결과합니다
일부 예 :
'ABC'Like 'ABC'true'ABC'like 'a%'true'ABC'like '_b_'true'ABC'like 'c'거짓
Like
항상 패턴 일치
문자 그대로 밑줄이나 백분율 부호와 스포츠 토토 결과합니다패턴보다 우선해야합니다탈출절. 탈출 캐릭터와 스포츠 토토 결과합니다
참고 :당신이있는 경우Standard_Conforming_strings끄기, 모든 백 슬래시섹션자세한 내용은
글쓰기로 탈출 문자를 선택할 수도 있습니다탈출 ''. 이것은 효과적으로 비활성화됩니다
키워드ilike사용할 수 있습니다Like경기를하기 위해SQL표준이지만 APostgreSQL확장.
연산자~~와 동일합니다Like
및~~*대응ilike
. 또한!~~and!~~*운영자좋아하지 않음
andilike
14177_14223PostgreSQL-specific.
유사
정규식String유사패턴 [탈출Escape-Character] String비슷하지 않음패턴 [탈출Escape-Character]
the유사
운영자Like
, 패턴을 해석한다는 점을 제외하고Like
표기법 및 일반적인 일반
LikeLike
,유사
운영자는 그 경우에만 성공합니다Like
, 유사합니다
용도_and%싱글을 나타내는 와일드 카드 문자로서.and.*in
이 시설 외에도 빌린이 시설 외에Like
, 유사합니다
이 패턴 매칭 메타 카라스터를 지원합니다
|교대를 나타냅니다 (어느 쪽이든
*|
+의 반복을 나타냅니다
?의 반복을 나타냅니다
{m}를 나타냅니다mTimes.
{m,}를 나타냅니다m또는 더 많은 시간.
{m,n}m그리고nTimes.
괄호()익숙해 질 수 있습니다
브래킷 표현[...]POSIX 일반과 마찬가지로 문자 클래스를 지정합니다
기간에 주목하십시오 (.)는 아닙니다유사
.
withLike
, 백 슬래시탈출.
일부 예 :
'ABC'와 유사한 'ABC'true'ABC' 'a'거짓'%(b | d)%'와 유사한 'ABC'true'ABC'와 비슷한 '(b | c)%'거짓
theSubstring
Substring (StringFrom패턴forEscape-Character)
, 제공유사합니다, 지정된 패턴은 전체 데이터와 일치해야합니다"). 패턴 부분과 일치하는 텍스트
몇 가지 예,#"구분
Substring ( '%#"O_B#"%'for '#').OOBSubstring ( '#'#'O_B#"%'for '#')NULL
표 9-12POSIX를 사용하여 패턴 일치에 사용 가능한 연산자를 나열합니다
표 9-12. 정규 표현식 일치
운영자 | 설명 | example |
---|---|---|
~ | 정규 표현, 사례 민감성 스포츠 토토 결과 | '토마스'~ |
~* | 정규 표현, 사례 insensitive 일치 | '토마스'~* |
!~ | 정규 표현, 사례와 스포츠 토토 결과하지 않습니다 | 'Thomas'! ~ |
!~* | 정규 표현식, 사례와 스포츠 토토 결과하지 않습니다 | '토마스'! ~* |
posix정규 표현Like
and유사
운영자. 와 같은 많은 유닉스 도구egrep, sed,awk패턴 일치 언어를 사용하십시오
정규 표현식은 문자 순서입니다.일반 세트). 문자열은 aLike
, 패턴 문자 일치 문자열Like
같지 않은Like
패턴, 정규 표현
일부 예 :
'ABC'~ 'ABC'true'ABC'~ '^a'true'abc'~ '(b | d)'true'abc'~ '^(b | c)'거짓
theposix패턴
theSubstring
Substring (StringFrom패턴)
, a의 추출을 제공합니다
일부 예 :
Substring ( 'O.B'에서 'foobar')OOB서브 스트링 ( 'o (.) b')의 'foobar')o
theregexp_replace
함수regexp_replace
(소스, 패턴, 교체 [,
플래그]). 그만큼소스문자열이 변경되지 않은 경우 반환됩니다패턴. 스포츠 토토 결과가 있으면소스문자열이 반환됩니다교체문자열교체문자열이 포함될 수 있습니다\n, 여기n는 1-9입니다n'the 괄호의 하위 표현\ &기판 스포츠 토토 결과임을 나타냅니다\\문자 그대로의 백 슬래시를플래그매개 변수는 0 이상을 포함하는 선택적 텍스트 문자열입니다.i사례에 민감한 스포츠 토토 결과를 지정합니다.g교체를 지정합니다테이블.
일부 예 :
regexp_replace ( 'foobarbaz', 'b ..', 'x')fooxbazregexp_replace ( 'foobarbaz', 'b ..', 'x', 'g')fooxxregexp_replace ( 'foobarbaz', 'b (..)', e'x \\ 1y ','g ')fooxaryxazy
theregexp_matches
함수regexp_matches
(String, 패턴 [,
플래그]). 기능g아래 플래그). 인 경우패턴함수와 일치하지 않습니다n'thn'the 괄호의 하위 표현"비 캡처"괄호; 아래를 참조하십시오플래그매개 변수g함수가 각각을 찾도록합니다테이블.
일부 예 :
regexp_matches를 선택하십시오 ( 'foobarbequebaz', '(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
지원테이블.
theregexp_split_to_array
함수는와 동일하게 동작합니다regexp_split_to_table
를 제외하고regexp_split_to_array
반환합니다텍스트. 그것은 있습니다regexp_split_to_array
(String, 패턴 [,
플래그]). 매개 변수regexp_split_to_table
.
일부 예 :
regexp_split_to_table에서 foo를 선택하십시오 ( '빠른 갈색 여우는 게으른 개를 뛰어 넘었습니다', e '\\ s+') foo;
마지막 예에서 알 수 있듯이 Regexp 분할 기능regexp_matches
,
PostgreSQL'정기
정규 표현식 (res), 정의 된대로posix1003.2, 두 가지 형태로 제공됩니다 :확장 res 또는EREs (대략egrep) 및BASIC res 또는bres (대략ed). PostgreSQL두 가지 양식과도 지원합니다re이 비 포스크를 사용하고 있습니다고급 res 또는are33673_33976
참고 : PostgreSQL항상 처음에 추정됩니다임베디드 옵션TO섹션. 이것은 호환성에 유용 할 수 있습니다posix1003.2 규칙.
정규 표현식은 하나 이상으로 정의됩니다분기, 분리|. 그것은 하나와 일치하는 모든 것과 스포츠 토토 결과합니다
지점이 0 이상입니다정량화또는제약 조건,
정량화 된 원자는입니다.Atom아마도 싱글이 뒤 따릅니다Quantifier. 정량자가 없으면 스포츠 토토 결과합니다Atom테이블. 가능한 정량 자와 그 의미는 다음과 같습니다테이블.
A 제약 조건빈과 스포츠 토토 결과합니다테이블; 몇 가지 더 많은 제약이 나중에 설명되어 있습니다.
표 9-13. 정규 발현 원자
Atom | 설명 |
---|---|
(re) | (whererere |
(? :re) | 위와 같이 성냥은 언급되지 않았습니다"비 캡처"괄호 세트) |
. | 단일 문자와 스포츠 토토 결과 |
[chars] | a 브래킷 표현,chars(참조섹션자세한 내용은) |
\k | (wherekis\\백 슬래시 문자와 스포츠 토토 결과 |
\c | 여기서cIS탈출, 참조섹션(Ares 만; Eres와 Bres에서c) |
{ | 숫자 이외의 캐릭터가 뒤 따르는 경우,{; 그 뒤에 숫자가 뒤 따릅니다bound(아래 참조) |
x | 여기서xis |
RE는 백 슬래시로 끝날 수 없습니다 (\).
참고 :당신이있는 경우Standard_Conforming_strings꺼져 있으십시오섹션자세한 내용은
표 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경계 내에는 허용 가능한 서명 된 소수 정수가 있습니다
비-그 리지Quantifiers (사용 가능Greedy)섹션자세한 내용은
참고 :정량자는 즉시 따를 수 없습니다**IS^또는|.
표 9-15. 정규 표현
제약 조건 | 설명 |
---|---|
^ | 문자열의 시작 부분에서 일치 |
$ | 문자열 끝에서 일치 |
(? =re) | 긍정적 인 룩 하이드서브 스트링이 스포츠 토토 결과하는 모든 시점에서 스포츠 토토 결과re시작 (Ares |
(?!re) | 음수 룩 하이드서브 스트링이 스포츠 토토 결과하지 않는 어느 시점에서 스포츠 토토 결과re시작 (Ares |
Lookahead 제약 조건을 포함 할 수 없습니다뒤로 참조(참조섹션), 그 안에있는 모든 괄호가 고려됩니다
A 브래킷 표현는 목록입니다[]. 그것^,not나머지 목록에서.-, 이것은 전체 범위의 속기입니다[0-9]inASCII모든 소수점과 스포츠 토토 결과합니다A-C-E. 범위는 매우 있습니다
문자 포함]^, 그것이 사용되는 경우). 문자를 포함하려면-, 그것을 첫 번째 또는 마지막으로 만드십시오-a의 첫 번째 끝점으로[.and.]그것을 집합 요소로 만들려면[(다음 참조\그렇지 않습니다
브래킷 표현 내에서, 집합 요소 (a[.and.]의 순서를 나타냅니다chCollating Element, 그런 다음 re[[. ch.]]*c처음 5 자와 스포츠 토토 결과합니다CHCHCC.
참고 : PostgreSQL현재는 그렇지 않습니다
브래킷 표현식 내에서, 집합 요소가 동봉되었습니다[=and=]is등가, 모든 캐릭터 시퀀스에 서 있습니다[.and.].)oand^동등한 클래스의 구성원이며[[= o =]], [[=^=]]및[O^]are
괄호 표현식 내에서 캐릭터 클래스의 이름[:and:]모든 문자 목록을 나타냅니다Alnum, 알파, blank, cntrl, DIGIT, 그래프, 낮은, 인쇄, PANCT, Space, 어퍼, xdigit. 이것들CTYPE. 로케일은 할 수 있습니다
괄호 표현식에는 두 가지 특별한 경우가 있습니다[[: <:]]and[[:> :]]일치하는 제약 조건입니다Alnum문자 (.CTYPE) 또는 밑줄.posix1003.2
탈출특수 시퀀스입니다\\\\는 일반적인 캐릭터입니다. (그만큼
캐릭터 엔트리 탈출표 9-16.
계급 속도 탈출제공표 9-17.
A 제약 탈출is테이블.
A 뒤로 참조 (\n) 스포츠 토토 결과합니다n(참조테이블). 예를 들어,([bc]) \ 1매치BB또는CC하지만BC또는CB. 하위 표현은 전적으로해야합니다
참고 :탈출의 주요임을 명심하십시오\언제 두 배가되어야합니다
'123'~ e '^\\ d 3'true
표 9-16. 정규 표현
탈출 | 설명 |
---|---|
\ a | ALERT (BELL) 문자 C |
\ b | c와 같이 백 스페이스 |
\ b | BacksLash의 동의어 (\) 필요를 줄이는 데 도움이됩니다 |
\ cX | (whereXX, 다른 비트는 모두입니다 |
\ e | Collating-Sequence 이름 인 캐릭터esc033 |
\ f | c와 같이 피드 양식 |
\ n | Newline, C |
\ r | Carriage Return, C |
\ t | c와 같이 수평 탭 |
\ uWXYZ | (whereWXYZis0xWXYZ |
\ ustuvwxyz | (wherestuvwxyz정확히 8 개의 16 진수 숫자) 문자0xstuvwxyz |
\ V | C와 같이 수직 탭 |
\ xHHH | (whereHHH0xHHH(16 진수에 관계없이 단일 문자 |
\ 0 | 가치가있는 캐릭터0(널 바이트) |
\XY | (whereXYIS뒤로 참조) 캐릭터0XY |
\xyz | (wherexyzIS뒤로 참조) 캐릭터0xyz |
16 진수 숫자는0-9, a-f및A-F. 옥탈 숫자는0-7.
숫자-입력은 외부 값을 지정하는 이스케이프입니다\ 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 | 문자열의 시작 부분에서만 스포츠 토토 결과합니다 (참조섹션이것이 어떻게 다른지^) |
\ m | 단어의 시작 부분에서만 스포츠 토토 결과 |
\ m | 단어의 끝에서만 스포츠 토토 결과 |
\ y | a의 시작 또는 끝에서만 스포츠 토토 결과합니다 |
\ y | 시작이 아닌 지점에서만 스포츠 토토 결과 |
\ z | 문자열 끝에서만 스포츠 토토 결과합니다 (참조섹션이것이 어떻게 다른지$) |
단어는의 사양에서와 같이 정의됩니다.[[: <:]]and[[:> :]]위. 제약 도피가 있습니다
표 9-19. 정기적 인 표현
탈출 | 설명 |
---|---|
\m | (wheremism'th subexpression |
\Mnn | (wheremisNN더 많은 숫자이고 소수점 값MnnMnn'th subexpression |
참고 :사이에는 고유 한 모호성이 있습니다
위에서 설명한 주요 구문 외에도
RE는 두 개의 특별 중 하나부터 시작할 수 있습니다감독접두사. RE가 시작되면*** :, 나머지는 다시 사용됩니다PostgreSQL, RES가 가정되기 때문에플래그REGEX 함수에 대한 매개 변수.) RE가 시작되는 경우***=, 나머지 RE는
an은 시작할 수 있습니다내장: 시퀀스(?xyz)(wherexyz는 하나 이상의 알파벳입니다플래그Regex 함수에 대한 매개 변수.테이블. 이 동일한 옵션 문자는에 사용됩니다.플래그Regex의 매개 변수
표 9-20. 내장 된 편지
옵션 | 설명 |
---|---|
b | 나머지 RE는 BRE |
c | Case-Ensentitive 매칭 (연산자를 재정의합니다 |
e | RE의 나머지는 ERE |
i | Case Insensitive Matching (참조섹션) (오퍼레이터 유형을 재정의) |
m | 역사적 동의어에 대한n |
n | Newline-Ensentitive Matching (참조섹션) |
p | 부분 Newline에 민감한 매칭 (참조섹션) |
q | 나머지 RE는 문자 그대로 ("인용") 문자열, 모두 일반 |
s | 비 뉴 라인 민감성 스포츠 토토 결과 (기본값) |
t | 타이트 구문 (기본값; 아래 참조) |
w | 반대 부분 Newline-Ensentive ("이상한") 매칭 (참조섹션) |
x | 확장 된 구문 (아래 참조) |
임베디드 옵션은에서 적용됩니다.)시퀀스 종단. 그들은 나타날 수 있습니다*** :감독이 있으면).
평소 외에도 (titg)확장구문, 사용할 수 있습니다x옵션. ~ 안에#그리고 다음 Newline (또는 끝의 끝
흰색 공간 문자 또는#앞서\유지
공백 또는#내
공백과 주석은 내부에 나타날 수 없습니다(? :
이 목적을 위해 흰색 공간 문자는 비어 있습니다.Space캐릭터 클래스.
마지막으로, 외부 괄호 표현식, the(?#TTT)(whereTTT텍스트는 없습니다))는 주석입니다.(? :. 그러한 의견은 더 역사적입니다
없음***=감독은 사용자를 지정했습니다
RE가 둘 이상과 스포츠 토토 결과 할 수있는 경우Greedy또는Greedy.
RE가 탐욕인지 여부는
대부분의 원자와 모든 제약은 탐욕이 없습니다
RE 주위에 괄호를 추가해도 변경되지는 않습니다
고정 반복 정량자를 갖는 정량화 된 원자{m}또는{m?)
다른 정상 정량기가있는 정량화 된 원자{m,n}withm동일n)는 욕심이 많습니다 (가장 길기
비 게리 수량자를 갖는 정량화 된 원자{m,n?withm동일n)는 비가비 (가장 짧은 선호)입니다
지점-즉, 최상위 수준이없는 re|운영자 - 동일합니다
|운영자는 항상입니다
위의 규칙은 욕심성 속성을 연관시킵니다전체적으로. 한 번
이것이 의미하는 바의 예 :
SELLE SELECT SILLTRING ( 'XY1234Z', 'y*([0-9] 1,3)');결과 :123SELLE SELECT SPTRING ( 'XY1234Z', 'y*? ([0-9] 1,3)');결과 :1
첫 번째 경우, RE 전체는 탐욕 스럽기 때문에Y*탐욕 스럽습니다. 시작과 스포츠 토토 결과 할 수 있습니다Y그리고 가장 긴 스포츠 토토 결과합니다Y123. 출력은 괄호 안의 부분입니다123. 두 번째 경우,y*?는 비 게리입니다. 시작할 수 있습니다Y, 가장 짧은 스포츠 토토 결과Y1. 하위 표현[0-9] 1,3욕심이 많지만 변경할 수는 없습니다1.
간단히 말해서, RE가 탐욕과 비 게리를 모두 포함하는 경우"Eat"각각에 대한
정량 자{1,1}and1,1?강제로 사용될 수 있습니다
regexp_matches를 선택하십시오 ( 'ABC01234XYZ', '(.*) (\ d+) (.*)');결과 :ABC0123,4, XYZ
작동하지 않았다 : 첫 번째.*IS"먹는다"만큼\ d+
regexp_matches를 선택하십시오 ( 'ABC01234XYZ', '(.*?) (\ d+) (.*)');결과 :abc, 0, ""
지금은 전체적으로 RE가
regexp_matches ( 'abc01234xyz', '(? : (.*?) (\ d+) (.*)) 1,1');를 선택하십시오.결과 :ABC, 01234, XYZ
RE의 전반적인 탐욕을 개별적으로 통제합니다
더 길거나 짧은 경기가 무엇인지 결정할 때 스포츠 토토 결과BB*세 가지와 스포츠 토토 결과합니다ABBBC; (주 | wee) (야간 | 기사단)스포츠 토토 결과합니다주중;(.*).*와 스포츠 토토 결과합니다ABC괄호 화 된 하위 표현(A*)*와 스포츠 토토 결과합니다BC전체와 괄호가 모두
사례 독립적 스포츠 토토 결과가 지정되면 효과가 있습니다x[xx]. 언제[x][xx]and[^x][^xx].
Newline에 민감한 매칭이 지정된 경우.및 괄호 사용^Newline 캐릭터와 결코 일치하지 않습니다 (So^and$이후의 빈 문자열과 스포츠 토토 결과합니다\ aand\ zString의 시작 또는 끝 계속전용.
부분 Newline에 민감한 매칭이 지정되면이.및 브래킷 표현식^and$.
역 부분 Newline에 민감한 일치가 인 경우^and$Newline에 민감합니다.및 브래킷
RES의 길이에 특정 제한이 부과되지 않습니다.
실제로 호환되지 않는 Ares의 유일한 특징\그렇지 않습니다***이사의 구문 마찬가지로
많은 ARE 확장은 Perl에서 빌려 왔지만\ b, \ b,
Ares와 사이에 두 가지 중요한 비 호환성이 존재합니다PostgreSQL:
In Ares,\
In Ares,\여전히 특별한 것으로 남아 있습니다[]그래서 a\브래킷 내\\.
Bres는 여러 측면에서 ERE와 다릅니다. Bres,|, +및?일반적인 캐릭터이며 거기에 있습니다\and\with{and}그 자체로 평범한 문자.\ (and\)with(and)by^is$끝을 제외한 일반적인 캐릭터입니다*는 일반적인 캐릭터입니다^). 마지막으로, 한 자릿수 백\ <and\>동의어입니다[[: <:]]and[[:> :]]각각; 다른 탈출은 없습니다