정규 표현식을 활용한 패턴 매칭과 대체
PostgreSQL은 정규식 일치의 경우 ~
를 사용하며 정규식 형식은 POSIX
정규식 표준을 따른다. ~
는 similar to를 의미한다.
정규표현식
- 0~9 숫자 중 하나 이상의 숫자를 포함한 경우
light
, light
, lights
, light,
lights,
문자가 포함된 경우1
2
3
| SELECT LEFT(description, 50)
FROM ufo
WHERE LEFT(description, 50) ~ '[0-9]+ light[s ,.]'
|
REGEXP_MATCHES()
REGEXP_MATCHES()
함수는 정규 표현을 문자열과 대조하여 일치하는 하위 문자열을 반환한다.
1
2
3
4
5
| SELECT (REGEXP_MATCHES(description, '[0-9]+ light[s ,.]'))[1], COUNT(*)
FROM ufo
WHERE description ~ '[0-9]+ light[s ,.]'
GROUP BY 1
ORDER BY 2 DESC;
|
REGEXP_MATCHES() 예시
REGEXP_MATCHES() 함수를 정확하게 이해하기 위해 다음과 같은 예시를 활용하겠다.
x |
---|
100 |
2 |
a한글12 |
999test |
a11b22c33 |
- 예시 1번
1
2
3
4
5
6
| -- 배열을 반환한다.
SELECT
x,
REGEXP_MATCHES(x, '[0-9]+')
FROM test
WHERE x ~ '[0-9]+';
|
x | regexp_matches |
---|
100 | {100} |
2 | {2} |
a한글12 | {12} |
999test | {999} |
a11b22c33 | {11} |
- 예시 2번
1
2
3
4
5
6
| -- 배열을 반환한다.
SELECT
x,
(REGEXP_MATCHES(x, '[0-9]+'))[1]
FROM test
WHERE x ~ '[0-9]+';
|
x | regexp_matches |
---|
100 | 100 |
2 | 2 |
a한글12 | 12 |
999test | 999 |
a11b22c33 | 11 |