Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
이전 | PostgreSQL : 문서 : 9.3 : 토토 사이트 추천 및 연산자 | 제 9 장 기능 및 운영자 | 사설 토토 사이트 : 문서 : 9.3 : 사설 토토 사이트 사설 토토 사이트 서식 함수 |
패턴 매칭에 대한 세 가지 별도의 접근 방식이 있습니다
에 의해postgresql: 전통적인SQL Like
운영자, 더 최근유사
연산자 (SQL : 1999에 추가) 및posix-스타일 정규 표현.
기본 외에"이 문자열이 젠 토토합니다
이 패턴? "운영자, 기능을 추출 할 수 있습니다
또는 젠 토토하는 하위 문자열을 교체하고 젠 토토시 문자열을 분할하려면
위치.
팁 :패턴 젠 토토 요구가있는 경우 그 이상입니다 이것은 Perl 또는 Tcl에서 사용자 정의 함수를 작성하는 것을 고려하십시오.
주의 |
대부분의 정규 표현력 검색은 매우 실행될 수 있습니다 빠르게, 임의적 인 정기적 인 표현이 고안 될 수 있습니다 처리 할 시간과 기억력. 받아들이는 것에주의하십시오 적대적인 소스의 일반 표현력 검색 패턴. 당신이 그렇게해야합니다. 명세서 시간 초과를 부과하는 것이 좋습니다. 사용 검색
|
Like
String좋아요패턴[탈출Escape-Character]String좋아하지패턴[탈출Escape-Character]
the좋아요
표현식은 참으로 반환됩니다
인 경우String제공된 것과 젠 토토패턴. (예상대로좋아하지 않음
표현식이 false를 반환하면좋아요
진실을 반환하고 그 반대도 마찬가지입니다. an
동등한 표현은NOT (String좋아요패턴).)
if패턴포함하지 않습니다
퍼센트 징후 또는 밑줄, 패턴은
문자열 자체; 이 경우좋아요
행위
평등 연산자처럼. 밑줄 (_) in패턴스탠드
단일 캐릭터의 경우; 백분율 표시 (%)는 0 이상의 모든 시퀀스와 젠 토토합니다
캐릭터.
일부 예 :
'ABC'Like 'ABC'true'ABC'like 'a%'True'ABC'like '_b_'true'ABC'like 'c'거짓
좋아요
항상 패턴 일치
전체 문자열을 커버합니다. 그러므로, 그것이 a와 일치하는 것이 바람직하다면
문자열 내 어디서나 순서, 패턴은 시작하고 종료해야합니다.
퍼센트 징후로.
젠 토토하지 않고 문자 그대로 밑줄 또는 퍼센트 부호와 젠 토토합니다. 다른 캐릭터, 각각의 캐릭터패턴탈출에 앞서 있어야합니다 성격. 기본 탈출 문자는 백 슬래시이지만 a 를 사용하여 다른 것을 선택할 수 있습니다.탈출절. 탈출 캐릭터 자체와 일치시키기 위해 두 개의 탈출 문자를 쓰십시오.
참고 :당신이있는 경우Standard_Conforming_strings끄기, 문자 그대로 문자열 상수로 쓴 백 슬래시 두 배가되어야합니다. 보다섹션 4.1.2.1자세한 내용은
글쓰기로 탈출 문자를 선택할 수도 있습니다탈출 ''. 이것은 효과적으로 비활성화됩니다 스페셜을 끄는 것이 불가능한 탈출 메커니즘 패턴의 밑줄과 비율 징후의 의미.
키워드ilike대신 사용할 수 있습니다Like젠 토토를 대상으로 인수합니다 활성 로케일에 따르면. 이것은에 없습니다.SQL표준이지만 APostgreSQL확장.
연산자~~좋아요
및~~*대응ilike
. 또한! ~~and! ~~*운영자
대표하다좋아하지
및ilike
각각. 이 모든 연산자
이다PostgreSQL-specific.
유사합니다
에게
정규식String유사패턴[탈출Escape-Character]String패턴[탈출Escape-Character]
the유사
운영자가 반환됩니다
패턴이 주어진 것과 일치하는지 여부에 따라 참 또는 거짓
끈. 와 비슷합니다.Like
를 제외하고
SQL 표준의 정의를 사용하여 패턴을 해석합니다.
정규 표현의. SQL 정규식은 호기심이 많습니다
교차좋아요
표기법 및
일반적인 정규 표현 표기법.
LikeLike
, The유사
운영자는 패턴 인 경우에만 성공합니다
전체 문자열과 일치합니다. 이것은 일반적인 정규 표현과 다릅니다
패턴이 문자열의 모든 부분과 일치 할 수있는 동작. 또한
좋다좋아요
, 유사
용도_and%와일드 카드 문자는 어떤 것도 표시합니다
단일 문자와 모든 문자열 (각각 비슷합니다
에게.and.*in
POSIX 정규 표현).
이 시설 외에도 빌린이 시설 외에좋아요
, 유사
Posix에서 빌린이 패턴 매칭 메타 카라 터스를 지원합니다
정규 표현 :
|교대를 나타냅니다 (둘 중 하나입니다 대안).
*이전의 반복을 나타냅니다 항목 0 이상.
+이전의 반복을 나타냅니다 항목 한 번 이상 항목.
?이전의 반복을 나타냅니다 항목 0 또는 한 번.
M이전 항목의 반복mTimes.
M,이전 항목의 반복M또는 더 많은 시간.
M,n를 나타냅니다 이전 항목의 반복M그리고nTimes.
괄호()그룹에 사용될 수 있습니다 단일 논리 항목에 항목.
브래킷 표현[...]지정 a POSIX 정규 표현과 마찬가지로 캐릭터 클래스.
기간에 주목하십시오 (.)는 아닙니다
Metacharacter for유사
.
withLike
, 백 슬래시 비활성화
이 metacharacters의 특별한 의미; 또는 다른
탈출 문자는로 지정할 수 있습니다.탈출.
일부 예 :
'ABC'와 유사한 'ABC'true'ABC' 'A'거짓'ABC' '%(b | d)%'와 유사합니다True'ABC'와 유사한 '(b | c)%'거짓
theSubstring
3이있는 기능
매개 변수,substring (StringFrom패턴forEscape-Character)
, 추출을 제공합니다
SQL 정규 발현 패턴과 일치하는 서브 스트링의. 처럼
와 함께유사, 지정된 패턴
전체 데이터 문자열과 일치하거나 기능이 실패하고
NULL을 반환합니다. 패턴의 일부를 나타내려면
성공에 반환되면 패턴에는 두 가지 발생이 포함되어야합니다.
탈출 문자 다음 이중 인용문 ("). 패턴 부분과 일치하는 텍스트
이 마커 사이에 반환됩니다.
몇 가지 예,#"리턴 문자열 :
Substring ( '%#"O_B#"%'for '#').OOBSubstring ( '#'#'O_B#"%'for '#').NULL
테이블 9-12사용 가능한 패턴 일치 작업을 사용하여 사용 가능한 연산자를 나열합니다 POSIX 정규 표현.
표 9-12. 정규 표현 시합 연산자
운영자 | 설명 | example |
---|---|---|
~ | 정규 표현, 사례 민감성 젠 토토 | 'Thomas'~ '.*Thomas.*' |
~* | 정규 표현, 사례 insensitive 젠 토토 | 'Thomas'~*'.*Thomas.*' |
! ~ | 정규 표현, 사례 민감성 젠 토토하지 않습니다 | 'Thomas'! ~ '.*Thomas.*' |
! ~* | 정규 표현, 사례 insensitive 젠 토토하지 않습니다 | '토마스'! ~*'.*vadim.*' |
posix정규 표현
보다 패턴 매칭을위한보다 강력한 수단을 제공합니다Like
and유사
연산자. 와 같은 많은 유닉스 도구egrep, sed또는awk패턴 일치 언어를 사용하십시오
여기에 설명 된 것과 유사합니다.
정규 표현식은 문자 순서입니다.
문자열 세트의 약식 정의 (a일반 세트). 문자열은 규칙적으로 일치한다고합니다
표현식이 설명하는 일반 세트의 구성원 인 경우
정규 표현. 와 마찬가지로좋아요
,
패턴 문자는 문자열 문자와 정확히 일치하지 않는 한 정확히 일치합니다
정규 표현 언어의 특수 문자 - 그러나 정기
표현식은와 다른 특수 문자를 사용합니다.좋아요
같지 않은좋아요
패턴, 정규 표현이 허용됩니다
정규 표현이없는 한 문자열 내 어디에서나 일치합니다.
문자열의 시작 또는 끝에 명시 적으로 고정되어 있습니다.
일부 예 :
'ABC'~ 'ABC'true'abc'~ '^a'true'abc'~ '(b | d)'true'abc'~ '^(b | c)'거짓
theposix패턴 언어입니다 아래에서 훨씬 더 자세히 설명합니다.
theSubstring
두 가지 기능
매개 변수,Substring (StringFrom패턴)
, a의 추출을 제공합니다
POSIX 정규 표현 패턴과 일치하는 서브 스트링. 그것
일치하지 않으면 null을 반환합니다. 그렇지 않으면
패턴과 일치하는 텍스트. 그러나 패턴에 포함 된 경우
괄호, 텍스트 부분은 첫 번째와 젠 토토합니다.
괄호 화 된 서브 표현 (왼쪽 괄호가 온다
먼저 반환됩니다. 당신은 전체에 괄호를 넣을 수 있습니다
당신이 그 안에 괄호 안에 괄호를 사용하고 싶다면 표현
이 예외를 트리거합니다. 패턴에 괄호가 필요한 경우
추출하려는 서브 표현 전에, 비 캡처를 참조하십시오.
아래에 설명 된 괄호.
일부 예 :
서브 스트링 ( 'O.B'에서 'foobar')OOB서브 스트링 ( 'o (.) b')O
theregexp_replace
함수
POSIX와 일치하는 하위 문자열에 대한 새 텍스트를 대체합니다.
정규 표현 패턴. 구문이 있습니다regexp_replace
(소스, 패턴, 교체[,
플래그]). 그만큼소스String은 변경되지 않으면 반환됩니다
와 일치하지 않습니다.패턴. 만약에
젠 토토가 있습니다,소스문자열
와 함께 반환됩니다.교체젠 토토하는 하위 문자로 치환 된 문자열. 그만큼교체문자열이 포함될 수 있습니다\n, 여기n는 1-9로 소스를 나타냅니다
일치하는 부분 문자열n'th
패턴의 괄호가 삽입 된 하위 표현을 삽입해야합니다
포함 할 수 있습니다\ &전체 패턴과 일치하는 서브 스트링을 삽입해야합니다. 쓰다\\문자 그대로의 백 슬래시를 넣어야하는 경우
교체 텍스트에서. 그만큼플래그매개 변수는 0 이상을 포함하는 선택적 텍스트 문자열입니다.
기능의 동작을 변경하는 단일 레터 플래그. 깃발i사례에 민감한 매칭을 지정합니다.
while flagg각각의 교체를 지정합니다
첫 번째 단지 일치하는 서브 스트링. 기타 지원
깃발은에 설명되어 있습니다.테이블
9-20.
일부 예 :
regexp_replace ( 'foobarbaz', 'b ..', 'x')fooxbazregexp_replace ( 'foobarbaz', 'b ..', 'x', 'g')fooxxregexp_replace ( 'foobarbaz', 'b (..)', 'x \ 1y', 'g')fooxaryxazy
theregexp_matches
함수
캡처 된 모든 하위 문자열의 텍스트 배열을 반환합니다.
POSIX 정규 표현 패턴과 일치하는 것입니다. 구문이 있습니다regexp_matches
(String, 패턴[, 플래그]). 함수는 반환 할 수 있습니다
행, 한 줄 또는 다중 행 ( 참조g아래 플래그). 인 경우패턴일치하지 않으면 함수는 행이 없습니다. 패턴에 NO가 포함 된 경우
괄호 화 된 하위 표현, 그런 다음 반환 된 각 행은 a입니다
일치하는 부분 문자열이 포함 된 단일 요소 텍스트 배열
전체 패턴. 패턴에 괄호가 포함 된 경우
하위 표현, 함수는 텍스트 배열을 반환합니다.n'th 요소는 젠 토토하는 부분 문자열입니다.n'괄호의 서브 표현
패턴 (계산되지 않음"비 캡처"괄호; 자세한 내용은 아래를 참조하십시오).
그만큼플래그매개 변수는 선택 사항입니다
변경되는 단일 레터 플래그를 포함하는 텍스트 문자열
기능의 동작. 깃발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_table
를 제외하고regexp_split_to_array
결과를 반환합니다
배열텍스트. 구문이 있습니다regexp_split_to_array
(String, 패턴[, 플래그]). 매개 변수는 동일합니다
forregexp_split_to_table
.
일부 예 :
regexp_split_to_table에서 foo를 선택하십시오 ( '빠른 갈색 여우는 게으른 개를 뛰어 넘어', '\ s+') foo; foo ------- 그만큼 빠른 갈색 여우 점프 ~ 위에 그만큼 게으른 개 (9 줄) regexp_split_to_array를 선택합니다 ( '빠른 갈색 여우가 게으른 개를 뛰어 넘습니다', '\ s+'); regexp_split_to_array ------------------------------------------------------- The, Quick, Brown, Fox, 점프, 오버, 게으른, 개
마지막 예에서 알 수 있듯이 Regexp 분할 기능
시작 또는 끝에서 발생하는 제로 길이 일치를 무시합니다.
문자열 또는 이전 경기 직후. 이것은 반대입니다
regexp 매칭의 엄격한 정의regexp_matches
그러나 보통입니다
실제로 가장 편리한 행동. 다른 소프트웨어 시스템
Perl이 비슷한 정의를 사용하기 때문에.
PostgreSQL'정기 표현식은 작성된 소프트웨어 패키지를 사용하여 구현됩니다 헨리 스펜서. 아래 정규 표현에 대한 설명의 대부분 그의 매뉴얼에서 구두로 복사됩니다.
정규 표현식 (res), AS 정의posix1003.2, 들어 오세요 두 가지 형태 :확장 res 또는EREs (대략egrep) 및BASIC res 또는bres (대략ed).PostgreSQL두 가지 양식과도 지원합니다 POSIX 표준이 아닌 일부 확장을 구현하지만 프로그래밍의 가용성으로 인해 널리 사용되었습니다. Perl 및 Tcl과 같은 언어re이 비 포스 확장을 사용하는 사용고급 res 또는ares 이 문서에서. Ares는 거의 Eres의 정확한 슈퍼 세트입니다. 그러나 BRES는 몇 가지 표기법 비 호환성을 가지고 있습니다 훨씬 더 제한적입니다). 먼저 Are와 Erer 형태를 설명합니다. Ares에만 적용되는 기능에 주목 한 다음 BRES를 설명합니다. 다르다.
참고 : PostgreSQL항상 처음에는 정규 표현이 ARI 규칙을 따르는 것으로 가정합니다. 그러나 더 제한된 ERE 또는 BRE 규칙은 선불임베디드 옵션re 에 설명 된대로 패턴섹션 9.7.3.4. 이것은 기대하는 응용 프로그램과의 호환성에 유용 할 수 있습니다. 정확히posix1003.2 규칙.
정규 표현식은 하나 이상으로 정의됩니다분기, 분리|. 그것은 가지 중 하나와 젠 토토하는 모든 것과 젠 토토합니다.
지점이 0 이상입니다정량화 원자또는제약 조건, 연결. 그것 첫 번째 경기와 일치하고 두 번째 경기에서 일치합니다. 등; 빈 분기는 빈 문자열과 일치합니다.
정량화 된 원자는입니다.Atom아마도 그 뒤 싱글Quantifier. a Quantifier, 그것은 원자와 젠 토토합니다. 정량 자로 원자의 일부 일치와 일치 할 수 있습니다.Atom표 9-13. 가능한 정량 자와 그 의미는에 표시됩니다.테이블 9-14.
a제약빈 문자열과 일치합니다. 그러나 특정 조건이 충족 될 때만 일치합니다. 제약은 할 수 있습니다 준수 할 수없는 경우를 제외하고 원자를 사용할 수있는 곳에 사용됩니다. 정량 자로. 간단한 제약이 표시됩니다.표 9-15; 몇 가지 더 많은 제약이 나중에 설명되어 있습니다.
표 9-13. 정규 발현 원자
Atom | 설명 |
---|---|
(Re) | (wherere정기적입니다 expression)과 일치하는re, 가능한보고에 대한 경기에 기록 |
(? :re) | 36499_36555"비 캡처"괄호 세트) (Ares 만 해당) |
. | 단일 문자와 젠 토토 |
[chars] | a브래킷 표현의chars(참조섹션 9.7.3.2자세한 내용) |
\K | (whereK는 비 알파 너가입니다 캐릭터)는 그 캐릭터와 평범한 캐릭터로 젠 토토하고, 예 :\\백 슬래시와 젠 토토합니다 성격 |
\C | 여기서C는 영숫자입니다 (아마도 다른 캐릭터가 이어질 수 있음)입니다.탈출, 참조섹션 9.7.3.3(Ares 만; Eres and Bres에서, 이것은 일치합니다C) |
숫자가 아닌 다른 캐릭터가 뒤 따르는 경우 left-brace character; 뒤 따르는 a 숫자, 그것은 a의 시작입니다.bound(아래 참조) | |
x | 어디x는 단일 문자입니다 다른 의미가 없으면 그 캐릭터와 젠 토토 |
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 |
사용 양식...로 알려져바운드. 숫자M및n경계 내에는 허용 가능한 서명되지 않은 소수 정수가 있습니다 0에서 255까지의 값.
비-그 리지Quantifiers (이용 가능 Ares 만)) 해당 가능성과 동일한 가능성과 일치합니다 정상 (Greedy) 상대방이지만 선호합니다 가장 많은 수의 성냥보다는 가장 작은 숫자입니다. 보다섹션 9.7.3.5자세한 내용은
참고 :정량자는 즉시 다른 것을 따를 수 없습니다 Quantifier, 예 :**유효하지 않습니다. 에이 Quantifier는 표현 또는 하위 표현을 시작하거나 따라갈 수 없습니다^또는|.
표 9-15. 정규 표현 제약
제약 조건 | 설명 |
---|---|
^ | 문자열의 시작 부분에서 젠 토토 |
$ | 문자열 끝에서 젠 토토 |
(? =re) | 긍정적 인 룩 하이드어느 쪽에서나 젠 토토합니다 서브 스트링이 젠 토토하는 지점re시작 (Ares 만 해당) |
(?!re) | 음수 룩 하이드어느 쪽에서나 젠 토토합니다 서브 스트링 젠 토토가없는 지점re시작 (Ares 만 해당) |
Lookahead 제약 조건을 포함 할 수 없습니다뒤로 참조(참조섹션 9.7.3.3), 그 안에있는 모든 괄호가 고려됩니다 비과약.
a브래킷 표현목록입니다 동봉 된 문자[]. 일반적으로 목록의 단일 문자와 젠 토토합니다 (그러나 아래 참조). 만약 목록은로 시작합니다.^, 그것은 단일과 젠 토토합니다 성격not에서 나머지 목록. 목록에있는 두 문자가에 분리 된 경우-, 이것은 전체 범위의 속기입니다 Collating 순서 에서이 두 가지 (포함) 사이의 문자, 예 :[0-9]inASCII모든 소수점 숫자와 젠 토토합니다. 불법입니다 엔드 포인트를 공유하는 두 범위 (예 :A-C-E. 범위는 매우 합의 된 시퀀스 의존적이며 따라서 휴대용 프로그램은 그들에게 의존하지 않아야합니다.
문자 포함]목록에서, 첫 번째 캐릭터로 만드십시오 (후^, if 그것은 사용됩니다). 문자를 포함하려면-, 그것을 첫 번째 또는 마지막 캐릭터로 만드십시오. 범위. 문자를 사용하려면-첫 번째 범위의 엔드 포인트,[.및.]이를 합의 요소로 만들려면 (참조 아래에). 이 문자를 제외하고는 일부 조합이 있습니다 사용[(다음 단락 참조) 및 탈출 (Ares 만 해당), 다른 모든 특수 캐릭터는 특별한 특수 인물을 잃습니다 브래킷 표현 내에서의 중요성. 특히,\ERE 또는 BRE 규칙을 따를 때 특별하지 않습니다. Ares에서 특별하지만 (탈출을 소개하는 것처럼)
괄호 표현식 내에서, 집단 요소 (캐릭터, A 마치 단일 인 것처럼 수집되는 다중 문자 순서 캐릭터 또는 하나의 Collating-Sectence 이름)에 동봉 된[.및.]스탠드 해당 충돌 요소의 문자 순서. 그만큼 시퀀스는 브래킷 표현의 단일 요소로 취급됩니다. 목록. 이것은 a를 포함하는 브래킷 표현식을 허용합니다 다중 문자 수집 요소가 둘 이상 일치합니다 예를 들어, Collating Sequence에 A가 포함 된 경우.chCollating Element, 그런 다음 re[[. ch.]]*c의 첫 5 자와 젠 토토CHCHCC.
참고 : PostgreSQL현재 다중 문자 수집 요소를 지원하지 않습니다. 이것 정보는 가능한 미래 행동을 설명합니다.
브래킷 표현식 내에서,.[=및=]is등가 클래스, 모든 Collating Elements의 문자 시퀀스와 동등합니다 그 자체를 포함하여 그 사람. (다른 동등한 사람이없는 경우 요소를 수집하면 치료는 마치 동봉 된 구분자처럼 이었다[.and.].) 예를 들어, ifOand^동등한 클래스의 구성원은[[= o =]], [[=^=]], 그리고[O^]모두 동의어입니다. an 등가 클래스는 범위의 끝점이 될 수 없습니다.
괄호 표현식 내에서 캐릭터 클래스의 이름 동봉[:and:]소속 된 모든 문자 목록을 나타냅니다 그 수업에. 표준 문자 클래스 이름은 다음과 같습니다.Alnum, 알파, blank, cntrl, 숫자, 그래프, 낮은, 인쇄, PANCT, Space, 어퍼, xdigit. 이 스탠드 정의 된 문자 클래스의 경우CTYPE. 로케일이 제공 할 수 있습니다 기타. 문자 클래스는 범위.
괄호 표현의 특별한 두 가지 사례가 있습니다 : 브래킷 표현[[: <:]]및[[: :]]빈 줄과 일치하는 제약 조건입니다 단어의 시작과 끝에 각각. 단어가 정의됩니다 앞에 있지 않은 일련의 단어 문자로 그 뒤에 단어 문자가 뒤 따릅니다. 단어 캐릭터는Alnum캐릭터 (정의 된대로CTYPE) 또는 밑줄. 이것 연장선이며, 호환되지만posix1003.2, 사용해야합니다 소프트웨어에주의를 기울여 다른 시스템에 휴대 할 수 있습니다. 아래에 설명 된 제약 도피는 일반적으로 바람직하다. 그들 더 이상 표준은 아니지만 입력하기가 더 쉽습니다.
탈출특수 시퀀스가 시작됩니다 와 함께\그 뒤에 영숫자가 뒤 따릅니다 성격. 탈출은 몇 가지 품종 : 캐릭터 항목, 클래스 속기, 제약 제한 탈출 및 후면 참조. 에이\그 뒤에 영숫자가 뒤 따릅니다 그러나 유효한 탈출을 구성하는 것은 아레스에서 불법입니다. Eres에서 탈출이 없습니다 : 브래킷 표현 외부, a\그 뒤에도 영숫자가 뒤 따릅니다 그 캐릭터를 평범한 캐릭터로, 그리고 내부 브래킷 표현,\는 평범합니다 성격. (후자는 하나의 실제 비 호환성입니다 Eres and Ares.)
캐릭터 엔트리 탈출비 인쇄 및 기타 불편한 문자를 지정하는 것이 더 쉽습니다 res. 그들은에 표시됩니다.테이블 9-16.
계급 속도 탈출제공 일반적으로 사용되는 특정 캐릭터 클래스의 속기. 그들은입니다 표시테이블 9-17.
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 이름이 인 캐릭터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 진수 숫자) 16 진수 가치가있는 캐릭터0xHHH(a 16 진수 숫자가 얼마나하든 단일 문자 사용된) |
\ 0 | 값이있는 캐릭터0( 널 바이트) |
\xy | (whereXY정확히 2 ~ 10 월입니다 숫자, 그리고뒤로 참조) the 옥탈 가치가있는 캐릭터0XY |
\xyz | (wherexyz정확히 3입니다 옥탈 숫자,뒤로 참조) 8 대 가치가있는 캐릭터0xyz |
16 진수 숫자는0-9, a-F및a-F. 옥탈 숫자는0-7.
숫자 특성 엔트리는 외부에서 값을 지정하는 이스케이프입니다 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 | 단어의 시작 또는 끝에서만 일치 |
\ y | 단어 |
\ z | 문자열 끝에서만 일치합니다 (참조섹션 9.7.3.5이것이 어떻게 다른지$) |
단어는의 사양에서와 같이 정의됩니다.[[: <:]]and[[: :]]위. 제약 도피는 괄호 안에서 불법입니다 표현.
표 9-19. 정규 표현 등 참조
탈출 | 설명 |
---|---|
\M | (whereM는 0이 아닌 숫자입니다) a 에 대한 뒷문M'th 하위 표현 |
\MNN | (whereM는 0이 아닌 숫자입니다. 그리고NN는 더 많은 숫자입니다 10 진수MNN더 크지 않습니다 지금까지 보이는 괄호 포획 괄호의 수보다) a 에 대한 뒷문MNN'th 하위 표현 |
참고 :Octal 사이에는 고유 한 모호성이 있습니다 캐릭터 엔트리는 탈출하고 참조가 해결됩니다 위에서 암시 된 다음 휴리스틱. 항상 주요 제로 옥탈 탈출을 나타냅니다. 0이 아닌 단일 숫자는 뒤 따릅니다 또 다른 숫자는 항상 등 참조로 간주됩니다. 여러 자리 0으로 시작하지 않는 시퀀스 적절한 서브 표현 이후에 나옵니다 (즉, 숫자는 등 참조를위한 법적 범위), 그렇지 않으면 10 월.
위에서 설명한 주요 구문 외에도 일부가 있습니다. 이용 가능한 특수 양식 및 기타 구문 시설.
RE는 두 개의 스페셜 중 하나부터 시작할 수 있습니다감독접두사. RE가 시작되면***:, 나머지 RE는 다음과 같이 간주됩니다. (이것 일반적으로에 영향을 미치지 않습니다.PostgreSQL, res는 Ares로 가정되기 때문에; 그러나 ERE 또는 BRE 모드가 그만큼플래그재성분에 대한 매개 변수 기능.) RE가 시작하면*** =, 나머지 RE는 모든 문자와 함께 문자 그대로 문자열로 간주됩니다. 평범한 문자로 간주됩니다.
an은 시작할 수 있습니다임베디드 옵션: 시퀀스(?xyz)(wherexyz는 하나 이상의 알파벳입니다 문자)는 나머지 RE에 영향을 미치는 옵션을 지정합니다. 이것들 옵션은 이전에 결정된 옵션, 특히 그들은 REGEX가 암시하는 사례 감지 행동을 무시할 수 있습니다. 연산자 또는플래그매개 변수로 재선 기능. 사용 가능한 옵션 문자는에 표시됩니다.테이블 9-20. 이 동일한 옵션 문자는에 사용됩니다.플래그Regex의 매개 변수 기능.
표 9-20. 내장 된 편지
옵션 | 설명 |
---|---|
B | 나머지 RE는 BRE |
C | Case-Ensentitive Matching (Ownerides Operator Type) |
e | 나머지 re is ere |
i | 사례 감지 일치 (참조섹션 9.7.3.5) (오퍼레이터 유형 오버라이드) |
M | 역사적 동의어n |
n | Newline-Ensentive 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옵션. 확장에서 구문, RE의 흰색 공간 문자는 모두 무시됩니다. a 사이의 문자#그리고 다음 Newline (또는 RE의 끝). 이것은 단락을 허용합니다 복잡한 댓글. 그 기본에는 세 가지 예외가 있습니다 규칙:
흰색 공간 문자 또는#선행 에 의해\유지
공백 또는#브래킷 내 표현은 유지됩니다
공백 및 댓글은 다중 문자 내에 나타날 수 없습니다 와 같은 기호(? :
이 목적을 위해 흰색 공간 문자는 비어 있습니다. Newline 및에 속하는 모든 캐릭터Space캐릭터 클래스.
마지막으로, 외부 괄호 표현식, 시퀀스(?#TTT)(whereTTTA가 포함되지 않은 텍스트입니다))는 완전히 무시 된 주석입니다. 다시 말하지만, 이것은 캐릭터 사이에 허용되지 않습니다 다중 문자 기호, 유사(? :. 그런 의견은 유용한 시설보다 역사적 인 유물이며 그들의 사용은 더 이상 사용되지 않습니다. 대신 확장 된 구문을 사용하십시오.
없음Metasyntax 확장은 초기이면 사용할 수 있습니다.*** =감독은 사용자의 입력을 지정했습니다 re.보다는 문자 그대로의 문자열로 취급
RE가 둘 이상의 하위 문자열과 일치 할 수있는 경우 주어진 문자열, RE는 끈. RE가 시작하여 둘 이상의 기판을 일치시킬 수 있다면 그 시점, 가장 긴 경기 또는 가장 짧은 경기 RE가에 따라 가능한 일치가 취해집니다.Greedy또는Greedy.
RE가 탐욕인지 여부는 다음과 같이 결정됩니다. 규칙 :
대부분의 원자와 모든 제약은 탐욕 속성이 없습니다 (어쨌든 변수의 텍스트와 일치 할 수 없기 때문에).
RE 주위에 괄호를 추가해도 변경되지는 않습니다 탐욕.
고정 반복 Quantifier (가있는 정량화 된 원자M또는M?)는 동일합니다 원자 자체로 탐욕 (아마도 없음).
다른 정상 정량기가있는 정량화 된 원자 (포함M,nwithM동일n) 탐욕 스럽습니다 (가장 긴 경기를 선호합니다).
비 게리 정량기가있는 정량화 된 원자 (포함m,n?withM동일n) 비 게리입니다 (가장 짧은 경기를 선호합니다).
지점-즉, 최상위 수준이없는 RE|운영자 - 첫 번째 욕심과 같은 욕심이 있습니다 탐욕 속성이있는 정량화 된 원자.
|운영자는 항상 탐욕 스럽습니다.
위의 규칙은 욕심이 아니라 속성을 연관시킵니다 개별 정량화 된 원자, 그러나 가지와 전체 res 정량화 된 원자를 포함합니다. 그 의미는 일치하는 것입니다 분기 또는 전체가 가장 길거나 가장 짧은 가능한 하위 문자전체적으로. 일단 길이가 전체 경기가 결정되며, 그 일부는 특정 하위 표현은 하위 표현의 탐욕 속성, 하위 표현과 함께 시작하는 것보다 우선 순위를 정하는 일찍부터 나중에.
이것이 의미하는 바의 예 :
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"서로에 대해.
정량 자69799_69806and1,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) (야간 | 기사단)10 자와 젠 토토합니다 의주중; 언제(.*).*와 젠 토토합니다ABC괄호가 된 하위 표현은 모두 일치합니다 세 문자; 그리고 언제(A*)*is 일치BC전체 전체와 괄호 안 하위 표현은 빈 문자열과 일치합니다.
사례 독립적 일치가 지정되면 그 효과는 모든 사례 차이가 알파벳에서 사라진 경우. 언제 여러 경우에 존재하는 알파벳은 평범한 것으로 보입니다. 괄호 표현 외부의 캐릭터는 효과적입니다 예를 들어 두 경우를 포함하는 브래킷 표현으로 변환x[xx]. 브래킷 표현식 내부에 나타나면 모든 경우에 대응합니다. 그것의 괄호 표현식에 추가됩니다 (예 :[x][xx]및[^x][^xx].
Newline에 민감한 매칭이 지정된 경우.및 괄호 사용^Newline 캐릭터와 결코 일치하지 않을 것입니다 RE가 명시 적으로 배열하지 않는 한 성냥은 신약을 넘지 않습니다. It) 및^and$Newline 이후 및 전에 빈 문자열과 일치합니다. 각각의 시작 및 끝에서 일치하는 것 외에도 각각 문자열. 하지만 탈출\ a및\ z계속 일치하십시오 문자열의 시작 또는 끝전용.
부분 Newline에 민감한 매칭이 지정되면에 영향을 미칩니다..및와 같이 브래킷 표현식 Newline에 민감한 매칭이지만^및$.
역 부분 Newline에 민감한 매칭이 지정되면이 경우 영향^및$Newline에 민감한 매칭과 마찬가지로.및 브래킷 표현식. 이것은 그다지 유용하지 않습니다 그러나 대칭을 위해 제공됩니다.
이것의 RES 길이에 특정 제한이 부과되지 않습니다. 구현. 그러나 프로그램은 휴대 성이 뛰어납니다 POSIX 호환으로 256 바이트 이상의 RES를 사용해서는 안됩니다. 구현은 그러한 res. 수락을 거부 할 수 있습니다.
실제로 호환되지 않는 Ares의 유일한 특징 Posix Eres는\그것을 잃지 않습니다 괄호 표현 내부의 특별한 중요성. 다른 모든 것입니다 기능은 불법이거나 정의되지 않은 구문을 사용합니다. Posix Eres에서 지정되지 않은 효과; 그만큼***이사의 구문 마찬가지로 둘 다 POSIX 구문 외부에 있습니다. Bres and Eres.
많은 ARE 확장은 Perl에서 빌려 왔지만 일부는 청소로 변경되었으며 몇 가지 Perl 확장이 아닙니다. 현재의. 주목할만한 비 호환성\ b, \ b, 특별한 부족 후행 신성 라인을위한 치료, 보완 된 추가 Newline에 민감한 것들에 대한 괄호 표현 일치하는, 괄호 및 후면 참조에 대한 제한 조회 제약 조건 및 가장 긴/가장 짧은 경기 (보다는 첫 경기) 일치 시맨틱.
Ares와 ERE 사이에 두 가지 중요한 비 호환성이 존재합니다 7.4 이전 릴리스에 의해 인식 된 구문PostgreSQL:
In Ares,\그 뒤에 영숫자가 뒤 따릅니다 캐릭터는 탈출 또는 오류이며 이전에는 릴리스, 그것은 영숫자를 쓰는 또 다른 방법이었습니다. 이것 이유가 없기 때문에 많은 문제가 없어야합니다. 이전 릴리스에 그러한 순서를 작성하십시오.
in Ares,\여전히 특별한 캐릭터입니다 이내에[], 그래서 문자 그대로\브래킷 표현식 내에 작성해야\\.
Bres는 여러 측면에서 ERES와 다릅니다. Bres,|, +및?평범한 문자이며 그에 동등한 것은 없습니다 그들의 기능을 위해. 경계의 구분자는\및\withand스스로 평범한 캐릭터. 중첩 하위 표현의 괄호는입니다.\ (및\), with(and)by 자신의 평범한 캐릭터.^is RE 또는 괄호 화 된 하위 표현의 시작,$RE 또는 괄호가있는 하위 표현의 끝 및*가 나타나면 일반적인 캐릭터입니다 RE의 시작 또는 괄호의 시작 하위 표현 (가능한 선두 후^). 마지막으로, 한 자릿수 백색 참조가 있습니다 사용 가능하고\ <and\의 동의어입니다[[: <:]]및[[: :]]각각; Bres에서는 다른 탈출구가 없습니다.
이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
비트 문자열 함수 및 연산자 | up | 데이터 유형 형식 기능 |