PostgreSQL 정규식 단어 경계?
PostgreSQL은 지원 \b
합니까?
나는 노력하고 \bAB\b
있지만 아무것도 일치하지 않지만 그렇습니다 (\W|^)AB(\W|$)
. 이 두 표현은 본질적으로 동일하지 않습니까?
PostgreSQL의 용도 \m
, \M
, \y
및 \Y
단어 경계로 :
\m matches only at the beginning of a word
\M matches only at the end of a word
\y matches only at the beginning or end of a word
\Y matches only at a point that is not the beginning or end of a word
매뉴얼의 정규 표현식 제약 이스케이프 를 참조하십시오 .
단어의 시작과 끝과 일치하는 [[:<:]]
및 도 있습니다 [[:>:]]
. 에서 수동 :
브래킷 식 : 두 가지 특별한 브라켓 식의 경우는
[[:<:]]
과[[:>:]]
각각 단어의 시작과 끝에서 빈 문자열을 일치하는 제약 조건입니다. 단어는 단어 문자의 앞이나 뒤에없는 일련의 단어 문자로 정의됩니다. 단어 문자는 alnum 문자 (ctype에 의해 정의 됨) 또는 밑줄입니다. 이것은 POSIX 1003.2와 호환되지만 지정되지 않은 확장이며 다른 시스템에 이식 할 수 있도록 고안된 소프트웨어에서주의해서 사용해야합니다. 아래에 설명 된 제약 이스케이프가 일반적으로 선호됩니다 (더 이상 표준은 아니지만 입력하기가 더 쉽습니다).
간단한 예
select * from table_name where column ~* '\yAB\y';
이것은 일치합니다 AB
ab
ab - text
text ab
text AB
text-ab-text
text AB text
...
그러나 다음을 사용해야합니다.
select * from sometable where name ~* '\\yAB\\y';
standard_conforming_strings
플래그를로 설정 한 경우 OFF
. 이중 슬래시에 유의하십시오 .
수동으로 설정할 수 있습니다.
set standard_conforming_strings=on;
그럼 : select * from table_name where column ~* '\yAB\y';
작동합니다.
텍스트에서 정확한 단어 검색 :
나는 다음과 같은 문제에 직면했다.
제목에 'cto'가 정확한 단어로 포함 된 모든 연락처를 검색하고 싶었지만 결과에서 제목에 'director'가 포함 된 결과를 얻었습니다. 다음 쿼리를 사용했습니다.
select * from contacts where title ilike '%cto%';
나는 또한 와일드 카드 주위에 whitspaces를 '% cto %'로 시도했지만 'cto'를 포함하는 텍스트와 일치하고 'vp, cto 및 manger'와 같은 결과를 얻었지만 정확한 제목이 'cto'인 결과는 얻지 못했습니다.
결과에는 'vp, cto 및 manger'와 'cto'를 모두 원했지만 결과에는 'director'가 아닙니다.
다음은 나를 위해 일했습니다.
select * from contacts where title ~* '\\ycto\\y';
~ Matches regular expression, case sensitive
~* Matches regular expression, case insensitive
참고 URL : https://stackoverflow.com/questions/3825676/postgresql-regex-word-boundaries
'Development Tip' 카테고리의 다른 글
자바 컴파일은 정확히 어떻게 이루어 집니까? (0) | 2020.12.08 |
---|---|
graphviz에 의해 생성 된 그래프의 크기 (면적) 줄이기 (0) | 2020.12.08 |
jQuery val () 및 확인란 (0) | 2020.12.08 |
Java의 System.in에서 읽는 가장 빠른 방법은 무엇입니까? (0) | 2020.12.08 |
C # 컴파일러가 IEnumerable 간의 명시 적 캐스트를 허용하는 이유 (0) | 2020.12.08 |